首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中根据值对两个列表进行分组

在Python中根据值对两个列表进行分组
EN

Stack Overflow用户
提问于 2015-11-02 20:35:02
回答 6查看 129关注 0票数 0

我在Python中有两个列表。

代码语言:javascript
复制
list1 = ['a','a','b','a','c','b','c','a','d','a','b']
list2 = ['1','2','21','12','1','32','11','12','21','3','31']

我必须在list1中对类似的元素进行分组。list2中的相应元素也应该在此基础上进行分组。输出应如下所示:

代码语言:javascript
复制
list1 = [['a','a','a','a','a'],['b','b','b'],['c','c'],['d']]
list2 = [['1','2','12','12','3'],['21','32','31'],['1','11'],['21']]

做这件事最好的方法是什么?

EN

回答 6

Stack Overflow用户

发布于 2015-11-02 20:50:55

如果您不关心第一个列表中元素的顺序,可以使用defaultdict

代码语言:javascript
复制
In [7]: from collections import defaultdict

In [8]: from itertools import izip

In [9]: res = defaultdict(list)

In [10]: for k, v in izip(list1, list2):
   ....:     res[k].append(v)
   ....:     

In [11]: print(res)
defaultdict(<type 'list'>, {'a': ['1', '2', '12', '12', '3'], 'c': ['1', '11'], 'b': ['21', '32', '31'], 'd': ['21']})

In [12]: res.items()
Out[12]: 
[('a', ['1', '2', '12', '12', '3']),
 ('c', ['1', '11']),
 ('b', ['21', '32', '31']),
 ('d', ['21'])]
票数 2
EN

Stack Overflow用户

发布于 2015-11-02 20:50:40

这段代码应该能做到这点:

代码语言:javascript
复制
final_list1 = []
final_list2 = []

for distinct in sorted(list(set(list1))):
    index = 0
    distinct_list1 = []
    distinct_list2 = []
    for element in list1:
        if element == distinct:
            distinct_list1.append(element)
            distinct_list2.append(list2[index])
        index += 1
    final_list1.append(distinct_list1)
    final_list2.append(distinct_list2)

list1 = final_list1
list2 = final_list2

这将为您提供您所要求的输出。如果您并不真正关心输出,那么可能有@soon提出的更好的方法。

票数 1
EN

Stack Overflow用户

发布于 2015-11-02 20:54:34

这段代码对我来说很有效:

代码语言:javascript
复制
groups = list(set(list1))
list1_tmp, list2_tmp = [], []
for char in groups:
   list1_tmp.append([])
   list2_tmp.append([])

for i in range(len(list1)):
   list1_tmp[groups.index(list1[i])].append(list1[i])
   list2_tmp[groups.index(list1[i])].append(list2[i])

list1 = list1_tmp
list2 = list2_tmp

输出对于任何其他类似的输入也应该是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33477715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档