如何将列表转换为具有重复键的字典?

Ada*_*Han 3 python dictionary list

我是Python编程的新生。现在我有一个列表“lst”,例如:lst = [(1,'a'), (2,'b'), (2,'c'), (3,'d')],我想从 lst 获取一个字典“d”。“d”应该是{1: ['a'], 2:['b','c'], 3:['d']}

d = defaultdict(list)

for k,v in lst:
    d[k].append(v)
Run Code Online (Sandbox Code Playgroud)

我如何使用理解来实现这一点?

Sor*_*ary 5

你的解决方案非常好。列表/字典理解并不总是最好的方法。但如果你坚持的话,你可以这样做:

from itertools import groupby

lst = [(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd')]

res = {k: [b for a, b in g] for k, g in groupby(lst, key=lambda x: x[0])}
print(res)
Run Code Online (Sandbox Code Playgroud)

输出:

{1: ['a'], 2: ['b', 'c'], 3: ['d']}
Run Code Online (Sandbox Code Playgroud)

注意:如果您传递一个排序列表,此解决方案将起作用,如果不是,请确保在字典理解中使用它之前对列表进行排序(感谢@Cepner)

sorted_lst = sorted(lst, key=lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)