Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用字典理解添加多个键、值对_Python - Fatal编程技术网

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

Python 使用字典理解添加多个键、值对,python,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': 'fu

查字典的清单

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']}

如何在对上述代码进行最小更改的情况下实现这一点

您正在使用同一个键生成多个键值对,字典将只存储唯一的键

如果您只需要一个键,您可以使用带有列表的词典:

container = {'a': [s['a'] for s in sample_dict if 'a' in s]}
请注意,如果只需要一个特定的键,则无需迭代
sample\u dict
中的嵌套字典;在上面的示例中,我只需测试键是否存在(
'a'在s
中),并使用
s['a']
提取该键的值。这比在所有键上循环快得多。

另一个选项:

filter = lambda arr, x: { x: [ e.get(x) for e in arr] }
因此,从这里,您可以基于原始数组和密钥构造dict

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

这会为丢失的键生成
None
值,而操作代码至少会简单地忽略该条目。如果从上面的代码中删除s中的“a”,则会得到相同的结果。。。它在这里有什么意义?好吧,我问这个问题太愚蠢了。我现在明白了。谢谢:)