概念上,我想要做的是:
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'}
根据这篇关于Python字典推导式语法的帖子,我能够使用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 }
在使用lambda时,我好像遇到了使用 :
表示键的问题。我也查看了原始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
我做错了什么?我是否可以做我正在尝试做的事情,即使用lambda的v2.7字典推导式语法?
请注意,我之所以问这个问题,只是出于好奇,而不是因为我有写这样需要专家才能理解的生产代码的强迫症!
PS:我应该提到另外两篇相关帖子,它们在我尝试做这件事时很有帮助。第一篇是关于在列表推导中使用lambda。另一篇是使用列表创建字典。