将同一字典键的值放入一个组中的Python

2024-04-23 21:20:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个清单:

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))

我想为每个键输出同一个键的值,这样它就可以这样打印了:

^{pr2}$

我写了下面的代码来实现这一点,但它并不像我想的那样有效

for k,v in dictionary.items():  

     print (k,v)

你能告诉我如何修改代码,这样我就能得到预期的结果吗? 提前谢谢!在


Tags: 代码infordictionaryitemszipdictprint
3条回答

关于您的代码:

dictionary = dict(zip(list1, list2))

创建词典:

^{pr2}$

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

使用列表的^{}将键来自list1和值来自{}的项分组。将每个列表中的项与^{}配对:

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']

因为字典中的项是无序的,所以输出是按键排序的。在

您可以使用itertool.groupby来获得简洁的单行解决方案:

import itertools
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']
final_list = {a:[i[-1] for i in list(b)] for a, b in itertools.groupby(zip(list1, list2), key=lambda x: x[0])}
for a, b in final_list.items():
    print(a, b)

输出:

^{pr2}$

您显示的代码与您所描述的完全不同。在

除此之外,您还可以通过先压缩列表,然后使用collections.defaultdict对同一个键的值进行分组:

from collections import defaultdict

d = defaultdict(list)
for k, v in zip(list1, list2):
    d[k].append(v)
print(d)
# defaultdict(<type 'list'>, {0: ['a', 'b', 'c'], 1: ['d', 'e'], 2: ['f', 'k'], 3: ['o', 'n'], 4: ['q', 't'], 5: ['z', 'w', 'l']})

相关问题 更多 >