<分区> 分区>
我有一个不一定具有相同键的字典列表。我正在尝试为每个具有特定键的字典中包含的值创建一个新列表。
例如
dict1 = {'key1': 1, 'key2': 2, 'key4': 4}
dict2 = {'key2': 2, 'key3': 3}
dict3 = {'key1': 1, 'key2': 2, 'key3': 3}
dict_list = [dict1, dict2, dict3]
现在我正尝试从 dict_list 创建一个列表,如下所示:
key2vals = [dict['key2'] for dict in dict_list]
print(key2vals)
[2, 2, 2]
效果很好,因为“key2”包含在列表中的每个字典中。然而,当我尝试一个没有出现在每本字典中的键时,我得到了一个错误。例如。 'key1':
>>> key1vals = [dict['key1'] for dict in dict_list]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
KeyError: 'key1'
是否有一种简短而直接的方法可以让我执行以下操作,但它不起作用?
# This does not work
key1vals = [dict['key1'] if 'key1' in dict for dict in dict_list]
什么是最符合 Pythonic 的方法来完成这个?
回答: for 和 if 语句的顺序应该颠倒过来:
key1vals = [dict['key1'] for dict in dict_list if 'key1' in dict ]
此外,根据 AbrahamB 和 DJV 的建议,我能够在没有搜索键的情况下为那些字典添加默认值:
[dict.get('key1', 0) for dict in dict_list]
