0

что у меня есть этот код:Создать словарь ж/список осмыслению из файла

someDict = {} 
for line in open("example.txt"): 
    key, val = line.strip().split(",") 
    someDict[key] = val 

с example.txt быть две части данных по каждой строке, разделенных запятой, например:

one,un 
two,deux 
three,trois 

и т.д.

Это работает в создании словаря, однако мне интересно, если это может быть достигнуто в одной строке (например, список/словарь понимания). Возможно ли это, или в противном случае более короткий/более простой способ сделать это?

ответ

5

Да, вы можете сделать это с generator expression и dict() callable:

with open('example.txt') as fileobj: 
    someDict = dict(line.strip().split(',', 1) for line in fileobj) 

Я ограничил расщепление только один раз; это позволяет значению содержать запятые и не нарушать выражение.

Вызываемый dict() принимает последовательность пар (ключ, значение), поэтому разделение строки на ровно два элемента точно соответствует этому требованию.

Я использовал with statement для обработки файлового объекта; он гарантирует, что файл будет закрыт после завершения чтения или создания исключения.

Это можно сделать и с помощью понимания словаря, но это обычно становится довольно уродливым, так как вам придется использовать дополнительный одноэлементный цикл для извлечения пары ключ-значение или разделить строку дважды.

+0

Спасибо, это здорово. Спасибо за такой ясный и лаконичный ответ, объясняющий, почему вы это сделали! – Pydronia