Вот решение, которое
- использует регулярное выражение для поиска всех вхождений буквы верхнего регистра, за которым следует число в скобках
- преобразует строку пар из regexp с выражением генератора в (значение, ключ) кортежей
- возвращает ключ из кортежа, который имеет самое высокое значение
Я также добавил основную функцию, чтобы сценарий мог использоваться в качестве инструмента командной строки для чтения всех строк из одного файла и записи ключа с наивысшим значением для каждой строки в выходной файл. Программа использует итераторы, так что это эффективная память независимо от того, насколько большой входной файл.
import re
KEYVAL = re.compile(r"([A-Z])\s*\((\d+)\)")
def max_item(row):
return max((int(v),k) for k,v in KEYVAL.findall(row))[1]
def max_item_lines(fh):
for row in fh:
yield "%s\n" % max_item(row)
def process_file(infilename, outfilename):
infile = open(infilename)
max_items = max_item_lines(infile)
outfile = open(outfilename, "w")
outfile.writelines(max_items)
outfile.close()
if __name__ == '__main__':
import sys
infilename, outfilename = sys.argv[1:]
process_file(infilename, outfilename)
Для одной строки, вы можете позвонить:
>>> max_item("A (8) C (4) G (48419) T (2)")
'G'
и обработать весь файл:
>>> process_file("inputfile.txt", "outputfile.txt")
Если вы хотите реальный список Python максимального значения каждой строки, в то вы можете использовать:
>>> map(max_item, open("inputfile.txt"))
Дайте нам две или три строки из вашего словаря и ожидаемый результат. – eumiro
Дубликат http://stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary – bluish
Почему вы используете выпуск с 2005 года? – delnan