Мне регулярно нужно считывать данные из (обычно с разделителями) значений и преобразовывать их в dicts. Обычно мне просто нужно сопоставить один из столбцов с другим, но может быть некоторая обработка значений (например, удаление дескрипторов). Я пытался придумать образец понимания речи, чтобы сделать это, но я все время сталкиваюсь с небольшими неприятностями, которые мешают мне реализовать его наиболее кратким и понятным способом. И я чувствую, что, вероятно, лучший способ.Чтение из файла с использованием определений dict.
Так вот (некоторые) способами, которые я попробовал, и куда они пошли не так:
with open(path) as f: return {line.split("\t")[0].strip(): line.split("\t")[1].strip() for line in f}
Это то, что я часто в конечном итоге использование. Это позволяет мне модифицировать ключ и значение на месте и работать с любым из столбцов (например, если бы я хотел отображать значения из третьего в первый столбец). Очевидной проблемой является дублирование части line.split()
. Есть ли способ привязать line.split("\t")
к временной переменной или распаковать значения непосредственно в переменные?
with open(path) as f: return dict(line.split("\t")[:2] for line in f)
Я только что пришел с этим. Он хорошо работает для этого простого случая (просто сопоставляя первый со вторым столбцом без какой-либо обработки), но не обобщает на другие случаи. Дополнительная обработка сложна, и используемые столбцы должны быть смежными. Это также не строгое понимание языка и не может быть превращено в одно, потому что оно использует срезы.
d = dict() for line in open(path): d.update({line.split("\t")[0]: line.split("\t")[1]}) return d
Конечно, я мог бы просто создать Dict первый, а затем обновить с каждой строки. Но теперь я должен создать dict и вернуть его отдельно, а дублирование кода все еще существует.
Я также играл с вложенным Dict постижений и распаковками расщепленных строк в переменные, но столкнулся с различными проблемами с этим.
Вы пытаетесь оптимизировать что-то, что, вероятно, связано с вводом-выводом, поэтому ничего не делать с созданием словарей как быстро или wi что наименьшее количество кода, вероятно, сильно изменит ситуацию. – martineau