Dee*_*pak 3 python dictionary group-by list
所以我有一系列这样的元组
query_results = [("foo", "bar"), ("foo", "qux"), ("baz", "foo")]
Run Code Online (Sandbox Code Playgroud)
我希望实现以下目标:
{
"foo": ["bar", "qux"],
"baz": ["foo"]
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试过使用它
from itertools import groupby
grouped_results = {}
for key, y in groupby(query_results, lambda x: x[0]):
grouped_results[key] = [y[1] for u in list(y)]
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是虽然键的数量是正确的,但每个数组中的值的数量远远低于它应该的数量.谁能解释为什么会发生这种情况以及我应该做些什么?
你最好用defaultdict这个:
from collections import defaultdict
result = defaultdict(list)
for k,v in query_results:
result[k].append(v)
Run Code Online (Sandbox Code Playgroud)
产量:
>>> result
defaultdict(<class 'list'>, {'baz': ['foo'], 'foo': ['bar', 'qux']})
Run Code Online (Sandbox Code Playgroud)
如果你想再把它变成一个香草词典,你可以 - 在for循环之后 - 使用:
result = dict(result)
Run Code Online (Sandbox Code Playgroud)
这导致:
>>> dict(result)
{'baz': ['foo'], 'foo': ['bar', 'qux']}
Run Code Online (Sandbox Code Playgroud)
A 在这里defaultdict建有工厂list.如果在字典中找不到密钥,则调用工厂(list()构造新的空列表).然后结果与密钥相关联.
因此,对于k尚未在字典中的每个键,我们将首先构造一个新列表.然后我们调用.append(v)该列表来向其追加值.