Skip to main content
 首页 » 编程设计

python之在字典中压缩两个列表,但在键中保留重复项

2025年05月04日15dflying

我有两个列表:

alist = ['key1','key2','key3','key3','key4','key4','key5'] 
 
blist=  [30001,30002,30003,30003,30004,30004,30005] 

我想合并这些列表并将它们添加到字典中。

我尝试 dict(zip(alist,blist)) 但这给出了:

{'key3': 30003, 'key2': 30002, 'key1': 30001, 'key5': 30005, 'key4': 30004}

字典的理想形式是:

{'key1': 30001, 'key2': 30002, 'key3': 30003,'key3':30003, 'key4': 30004, 'key4': 30004, 'key5': 30005}

我想保留字典中的重复项,而不是将值连接到同一个键中 (... key3': 30003,'key3':30003,... )。这可能吗?

提前致谢。

请您参考如下方法:

你不能这样做,因为 dict 对象只能有唯一的键。相反,您应该使用元组列表:

>>> alist = ['key1','key2','key3','key3','key4','key4','key5'] 
>>> blist=  [30001,30002,30003,30003,30004,30004,30005] 
 
>>> zip(alist, blist) 
[('key1', 30001), ('key2', 30002), ('key3', 30003), ('key3', 30003), ('key4', 30004), ('key4', 30004), ('key5', 30005)] 

如果你想访问基于键的所有值,你可以使用 collections.defaultdict 作为:

>>> from collections import defaultdict 
 
>>> my_dict = defaultdict(list) 
>>> for k, v in zip(alist, blist): 
...     my_dict[k].append(v) 
... 
>>> my_dict 
defaultdict(<type 'list'>, {'key3': [30003, 30003], 'key2': [30002], 'key1': [30001], 'key5': [30005], 'key4': [30004, 30004]}) 

您可以像普通字典对象一样访问defaultdict。例如:

>>> my_dict['key3'] 
[30003, 30003]