栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

识别列表列表中具有3个共同点的列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

识别列表列表中具有3个共同点的列表

您可以使用相同的原理,方法是将前三个元素用作键,并将

int
用作默认值工厂
defaultdict
(这样您将获得
0
初始值):

from collections import defaultdicta_list = [['apple', 50, 60, 7],          ['orange', 70, 50, 8],          ['apple', 50, 60, 12]]d = defaultdict(int)for sub_list in a_list:    key = tuple(sub_list[:3])    d[key] += sub_list[-1]new_data = [list(k) + [v] for k, v in d.iteritems()]

如果您使用的是Python 3,则可以简化为:

d = defaultdict(int)for *key, v in a_list:    d[tuple(key)] += vnew_data = [list(k) + [v] for k, v in d.items()]

因为您可以使用加星标的目标从列表中获取所有“剩余”值,所以每个子列表主要分配给

key
,最后一个值分配给
v
,从而使循环变得更简单了(并且
.iteritems()
dict中没有方法Python
3,因为
.items()
已经是一个迭代器)。

所以,我们使用一个

defaultdict
使用
0
作为默认值,然后从第3个值产生的每个键(作为一个元组,所以你可以使用它作为一个字典的键)总结的最后一个值。

  • 因此,对于第一个项目,

    ['apple', 50, 60, 7]
    我们创建一个key
    ('apple', 50, 60)
    ,在
    d
    其中查找键(该键不存在,但是
    defaultdict
    int()
    用于创建新值
    0
    ),然后
    7
    从该第一项中添加。

  • ('orange', 70, 50)
    键和值执行相同的操作
    8

  • 对于第3个项目,我们

    ('apple', 50, 60)
    再次获取密钥,并将其添加
    12
    到中已存在的密钥
    7
    d[('apple', 50, 60)]
    。共19个

然后,我们将(键,值)对重新放入列表中,您就完成了。结果是:

>>> new_data[['apple', 50, 60, 19], ['orange', 70, 50, 8]]

需要对数据进行排序的另一种实现方式是

itertools.groupby

from itertools import groupbyfrom operator import itemgettera_list = [['apple', 50, 60, 7],          ['orange', 70, 50, 8],          ['apple', 50, 60, 12]]newlist = [list(key) + [sum(i[-1] for i in sublists)]     for key, sublists in groupby(sorted(a_list), key=itemgetter(0, 1, 2))]

对于相同的输出。如果您的数据未排序,这会变慢,但是很高兴知道不同的方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661424.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号