Я пытаюсь переписать следующий код для работы с пониманием словаря, просто для удовольствия:
import itertools
with open('foo.txt') as f:
entities = f.read().splitlines()
parsed_entities = []
while entities:
props = itertools.takewhile(lambda n: n != 'EOM', entities)
entity = {p.split('=')[0]: p.split('=')[1] for p in props}
entities = entities[len(entity)+2:] # Delete and skip EOM & newline
parsed_entities.append(entity)
Я хочу заменить эту строку:
entity = {p.split('=')[0]: p.split('=')[1] for p in props}
С улучшенным пониманием словаря, которое может выглядеть так:
entity = {key: value for p in props for key, value in p.split('=')}
Когда я пытаюсь это сделать, я получаю следующую ошибку:
ValueError: слишком много значений для распаковки (ожидается 2)
Что я делаю не так? Используя ipdb.pm()
, я увидел, что p равно name=yam
, что хорошо, но key
и value
не определены.
p.split('=')
не равна 2. - person Sam Chats   schedule 01.07.2017p.split('=')[0]
нет, вот и распаковывается. - person Martijn Pieters   schedule 01.07.2017p.split('=')
наprint(len(p.split('=')))
, получилось 2. - person Infinity   schedule 01.07.2017