首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python_grouping多维列表

Python_grouping多维列表
EN

Stack Overflow用户
提问于 2016-03-15 10:22:25
回答 2查看 74关注 0票数 0

我有一个多维列表示例:

代码语言:javascript
复制
    example_list=[
        ["a","b","c", 2,4,5,7],
        ["e","f","g",0,0,1,5],
        ["e","f","g", 1,4,5,7],
        ["a","b","c", 3,2,5,7]
    ]

怎么可能把他们分成这样的小组:

代码语言:javascript
复制
out_list=[
         [["a","b","c", 2,4,5,7],
           ["a","b","c",3,2,5,7]
         ],
         [["e","f","g", 0,0,1,5],
          ["e","f","g", 1,4,5,7]
         ]
 ]

我试过这样做:

代码语言:javascript
复制
example_list=[["a","b","c", 2,4,5,7],["e","f","g", 0,0,1,5],["e","f","g",1,4,5,7],["a","b","c", 3,2,5,7]]
unique=[]
index=0
for i in range(len(example_list)):
    newlist=[]
    if example_list[i][:3]==example_list[index][:3]:
        newlist.append(example_list[i])
    index=index+1
    unique.append(newlist)            
print unique

我的结果是:

[['a','b','c',2,4,5,7],['e','f','g',0,0,1,5],[e‘,'f','g',1,4,5,7],['a','b','c',3,2,5,7]]

我搞不懂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-15 10:33:42

如果分组是由每个列表中的前三个元素决定的,下面的代码将满足您的要求:

代码语言:javascript
复制
from collections import defaultdict

example_list=[["a","b","c", 2,4,5,7],["e","f","g",0,0,1,5],["e","f","g", 1,4,5,7],["a","b","c", 3,2,5,7]]
d = defaultdict(list)
for l in example_list:
    d[tuple(l[:3])].append(l)

print d.values() # [[['a', 'b', 'c', 2, 4, 5, 7], ['a', 'b', 'c', 3, 2, 5, 7]], ...]

这将使用defaultdict生成一个字典,其中键是前三个元素,值是从这些元素开始的列表列表。

票数 0
EN

Stack Overflow用户

发布于 2016-03-15 10:38:25

首先,简单地使用sorted()对列表进行排序,提供一个lambda函数作为键。

代码语言:javascript
复制
>>> a = sorted(example_list, key=lambda x:x[:3])
[['a', 'b', 'c', 2, 4, 5, 7], ['a', 'b', 'c', 3, 2, 5, 7], ['e', 'f', 'g', 0, 0, 1, 5], ['e', 'f', 'g', 1, 4, 5, 7]]

然后在排序列表上使用itertools.groupby()

代码语言:javascript
复制
>>> [list(v) for k, v in groupby(a, lambda x:x[:3])]
[
    [['a', 'b', 'c', 2, 4, 5, 7], ['a', 'b', 'c', 3, 2, 5, 7]], 
    [['e', 'f', 'g', 0, 0, 1, 5], ['e', 'f', 'g', 1, 4, 5, 7]]
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36008499

复制
相关文章

相似问题

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