Skip to main content
 首页 » 编程设计

python之将相同字典键的值放在python中的一组中

2025年05月04日9mengfanrong

我有两个列表:

list1=[0,0,0,1,1,2,2,3,3,4,4,5,5,5]
list2=['a','b','c','d','e','f','k','o','n','q','t', 'z','w','l']

dictionary=dict(zip(list1,list2)) 

我想为每个键输出相同键的值,例如它会像这样打印:

 0 ['a','b','c']   
 1 ['d','e']   
 2 ['f','k']   
 3 ['o','n']   
 4 ['q','t']   
 5 ['z','w','l']  

我写了下面的代码来做到这一点,但它并没有像我想的那样工作

for k,v in dictionary.items():   
 
     print (k,v) 

您能告诉我如何修正代码,以便我可以获得超出预期的结果吗? 提前致谢!

请您参考如下方法:

关于您的代码:

dictionary = dict(zip(list1, list2)) 

创建字典:

{0: 'c', 1: 'e', 2: 'k', 3: 'n', 4: 't', 5: 'l'} 

它会丢失每组中除最后一个值以外的所有值。您需要处理压缩列表以构建分组数据。两种方法是使用 itertools.groupby() 或使用 defaultdict(list),如下所示。

使用 collections.defaultdict列表以使用 list1 中的键和 list2 中的值对项目进行分组。将每个列表中的项目与 zip() 配对:

from collections import defaultdict 
 
list1=[0,0,0,1,1,2,2,3,3,4,4,5,5,5] 
list2=['a','b','c','d','e','f','k','o','n','q','t','z','w','l'] 
 
d = defaultdict(list) 
 
for k,v in zip(list1, list2): 
    d[k].append(v) 
 
for k in sorted(d): 
    print('{} {!r}'.format(k, d[k])) 

输出:

0 ['a', 'b', 'c'] 
1 ['d', 'e'] 
2 ['f', 'k'] 
3 ['o', 'n'] 
4 ['q', 't'] 
5 ['z', 'w', 'l'] 

由于字典中的项目是无序的,所以输出是按键排序的。