【发布时间】:2016-02-04 10:51:04
【问题描述】:
从概念上讲,这是我想要做的:
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 }
我似乎在 lambda 中使用 : 与在表示键时发生冲突。我还查看了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
我做错了什么?是否有可能做我想做的事情,即使用 lambda 的字典理解的 v2.7 语法?
请注意,我只是出于好奇提出这个问题;并不是我有编写这种生产代码的冲动,需要专家才能理解!
PS:我应该提到另外两个相关的帖子,我在尝试这样做时发现它们很有帮助。第一个是关于using lambda in list comprehension. 另一个是creating a dictionary using list。
【问题讨论】:
标签: python dictionary lambda list-comprehension