Концептуально, вот что я хочу сделать:Python: Создание словаря с помощью списка понимание из списка с помощью лямбда
lookup = {'A': 'aaa', 'B': 'bbb', 'C': 'ccc'}
keys = ['A', 'B', 'Z'] # Note 'Z' does not exist in dict
result = {}
for key in keys:
if key in lookup:
result[key] = lookup[key]
else:
result[key] = None
Приведенный выше код дает следующее, т.е.
# result == {'A': 'aaa', 'Z': None, 'B': 'bbb'}
Основываясь на советовании в this post about dictionary comprehension syntax я могу сделать следующее, используя v2.6 синтаксис:
result = dict((lambda x: (x, lookup[x]) if x in lookup else (x, None))(key) for key in keys)
Что работает и дает одинаковые результаты.
Однако я надеялся, что смогу сделать следующее в стиле v2.7 (также упоминается в вышеприведенном сообщении). Но это не похоже на работу,
result = { (lambda x: x: a_dict[x] if x in a_dict else x: None)(key) for key in a_list }
Я, кажется, вступая в противоречие с использованием :
в лямбда с тем, что в обозначении ключ. Я также рассмотрел примеры, приведенные в original PEP. Они также не дают никаких указаний. Ниже приведен вывод из командной строки:
>>> result = { (lambda x: x : a_dict[x] if x in a_dict else x: None)(key) for key in a_list }
File "<stdin>", line 1
result = { (lambda x: x : a_dict[x] if x in a_dict else x: None)(key) for key in a_list }
^
SyntaxError: invalid syntax
Что я делаю неправильно? Можно ли делать то, что я пытаюсь сделать, т. Е. Использовать синтаксис словаря для v2.7 с помощью лямбда?
Обратите внимание, что я спрашиваю только из любопытства; дело не в том, что у меня есть принуждение написать такой производственный код, который потребует от эксперта понять!
PS: Я должен упомянуть две другие связанные должности, которые я нашел полезными, пытаясь сделать это. Сначала около using lambda in list comprehension. И еще creating a dictionary using list.
Благодаря @Anand это помогает. Оба ответа избавляют меня от необходимости использовать лямбда. Однако вторая часть моего вопроса остается без ответа, т. Е. Можно использовать лямбда при использовании синтаксиса понимания словаря v2.7. –
@AlokLal Ответил на ваш вопрос в ответе, пожалуйста, проверьте его. –
очень полезно. Благодаря! –