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

use*_*_01 2 python iteration dictionary list key-value

我有两个清单:

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))
Run Code Online (Sandbox Code Playgroud)

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

 0 ['a','b','c']  
 1 ['d','e']  
 2 ['f','k']  
 3 ['o','n']  
 4 ['q','t']  
 5 ['z','w','l'] 
Run Code Online (Sandbox Code Playgroud)

我编写了以下代码来做到这一点,但它并不像我想象的那样工作

for k,v in dictionary.items():  

     print (k,v)
Run Code Online (Sandbox Code Playgroud)

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

mha*_*wke 5

关于您的代码:

dictionary = dict(zip(list1, list2))
Run Code Online (Sandbox Code Playgroud)

创建字典:

{0: 'c', 1: 'e', 2: 'k', 3: 'n', 4: 't', 5: 'l'}
Run Code Online (Sandbox Code Playgroud)

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

使用of 列表对具有来自 的键和来自 的值的collections.defaultdict项目进行分组。将每个列表中的项目与:list1list2zip()

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]))
Run Code Online (Sandbox Code Playgroud)

输出:

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

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