首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -将列表划分为组

Python -将列表划分为组
EN

Stack Overflow用户
提问于 2011-02-12 20:25:06
回答 3查看 253关注 0票数 2

考虑以下简化情况:

代码语言:javascript
复制
lol = [['John','Polak',5,3,7,9],
       ['John','Polak',7,9,2,3],
       ['Mark','Eden' ,0,3,3,1],
       ['Mark','Eden' ,5,1,2,9]]

什么是pythonic和memory+speed高效的方法,根据前两个参数将列表列表转换为列表列表:

代码语言:javascript
复制
lolol = [[['John','Polak',5,3,7,9],
          ['John','Polak',7,9,2,3]],
         [['Mark','Eden' ,0,3,3,1],
          ['Mark','Eden' ,5,1,2,9]]]

事实上,只要我有正确的层次结构,任何其他的数据结构都是可以的。例如,想到了下面的字典结构,但是创建它似乎不够高效,内存可能比洛洛尔的解决方案要高。

代码语言:javascript
复制
dolol = {('John','Polak'):[[5,3,7,9],[7,9,2,3]],
         ('Mark','Eden') :[[0,3,3,1],[5,1,2,9]]}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-13 07:29:18

要用相当于Python 2的Python 2来补充delnan的答案:

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

dolol=defaultdict(list)
for data in lol:
    dolol[data[0],data[1]].append(data[2:])
票数 0
EN

Stack Overflow用户

发布于 2011-02-12 21:59:39

列表:

代码语言:javascript
复制
from itertools import groupby
lolol = [list(grp) for (match, grp) in groupby(lol, lambda lst: lst[:2])]
# [[['John', 'Polak', 5, 3, 7, 9], ['John', 'Polak', 7, 9, 2, 3]],
#  [['Mark', 'Eden', 0, 3, 3, 1], ['Mark', 'Eden', 5, 1, 2, 9]]]

字典:

代码语言:javascript
复制
dolol = dict((tuple(match), [x[2:] for x in grp]) for (match, grp) in 
             groupby(lol, lambda lst: lst[:2]))
# {('John', 'Polak'): [[5, 3, 7, 9], [7, 9, 2, 3]],
#  ('Mark', 'Eden'): [[0, 3, 3, 1], [5, 1, 2, 9]]}

因为itertools.groupby在连续匹配上工作,所以它假设排序输入(lol)。

票数 6
EN

Stack Overflow用户

发布于 2011-02-12 20:30:31

如果字典是可接受的,则此代码将创建一个:

代码语言:javascript
复制
import collections
d = collections.defaultdict(list)
for name, surname, *stuff in lol:
    d[name, surname].append(nums)

注意,这需要Python3 (扩展可迭代解包装)。对于Python 2,请使用

代码语言:javascript
复制
for x in lol:
    name = x[0]
    surname = x[1]
    stuff = x[2:]

您可以折叠这些变量以保存行。

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

https://stackoverflow.com/questions/4980414

复制
相关文章

相似问题

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