我有以下数据:
data = [(1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3)]
Run Code Online (Sandbox Code Playgroud)
我想创建一个包含键列表值的字典,我怎样才能用字典理解呢?
即:
{1: [2,3,4]
2: [1,2,3]
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下内容,但列表在每次迭代时都会被覆盖.
{x: [y] for x,y in data}
Run Code Online (Sandbox Code Playgroud)
你可以使用这个词典理解:
d = {x: [v for u,v in data if u == x] for x,y in data}
Run Code Online (Sandbox Code Playgroud)
但请注意,这是非常低效的,因为它将循环整个列表n+1时间!
更好地使用一个普通的for循环:
d = {}
for x,y in data:
d.setdefault(x, []).append(y)
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用itertools.groupy(由您自己发现):
groups = itertools.groupby(sorted(data), key=lambda x: x[0])
d = {k: [g[1] for g in group] for k, group in groups}
Run Code Online (Sandbox Code Playgroud)
在所有情况下,d最终成为{1: [2, 3, 4], 2: [1, 2, 3]}