使用字典理解添加多个键值对

时间:2016-10-17 06:28:48

标签: python

获取词典列表

sample_dict = [
{'a': 'woot', 'b': 'nope', 'c': 'duh', 'd': 'rough', 'e': '1'},
{'a': 'coot', 'b': 'nope', 'c': 'ruh', 'd': 'rough', 'e': '2'},
{'a': 'doot', 'b': 'nope', 'c': 'suh', 'd': 'rough', 'e': '3'},
{'a': 'soot', 'b': 'nope', 'c': 'fuh', 'd': 'rough', 'e': '4'},
{'a': 'toot', 'b': 'nope', 'c': 'cuh', 'd': 'rough', 'e': '1'}
]

如何创建一个单独的字典,其中包含与某个键匹配的所有键值对。通过列表理解,我创建了一个包含所有键值对的列表:

container = [[key,val] for s in sample_dict for key,val in s.iteritems() if key == 'a']

现在容器给了我

[['a', 'woot'], ['a', 'coot'], ['a', 'doot'], ['a', 'soot'], ['a', 'toot']]

这一切都很好......但是如果我想对字典做同样的事情,我只得到一个单键,值对。为什么会这样?

container = {key : val for s in sample_dict for key,val in s.iteritems() if key == 'a'}

容器只提供一个元素

{'a': 'toot'}

我想要像

这样的东西
{'a': ['woot','coot','doot','soot','toot']}

如何对上面的代码进行最少的更改?

2 个答案:

答案 0 :(得分:4)

您使用相同的密钥生成多个键值对,而字典只会存储唯一的键。

如果您只想要一个键,则可以使用带有列表理解的字典:

container = {'a': [s['a'] for s in sample_dict if 'a' in s]}

请注意,如果您想要的只是一个特定的密钥,则无需迭代sample_dict中的嵌套字典;在上面我只是测试密钥是否存在('a' in s)并用s['a']提取该密钥的值。这比比循环遍历所有键。

答案 1 :(得分:-1)

另一种选择:

filter = lambda arr, x: { x: [ e.get(x) for e in arr] }

因此,从这里开始,您可以根据原始数组和键

构造dict
 filter(sample_dict, 'a')
# {'a': ['woot', 'coot', 'doot', 'soot', 'toot']}