python - 在 Python 中对字典列表中的数据进行排序和组合

标签 python list sorting dictionary

我有一个与此类似的词典列表:

{'Catch': 4.414, 'ShipID': 173, 'Name': u'Sigur\xf0ur \xd3lafsson SF - 44', 'Gear': u'BOTN'}
{'Catch': 2.401, 'ShipID': 173, 'Name': u'Sigur\xf0ur \xd3lafsson SF - 44', 'Gear': u'BOTN'}
{'Catch': 67.463, 'ShipID': 1275, 'Name': u'J\xf3n V\xeddal\xedn VE - 82', 'Gear': u'BOTN'}
{'Catch': 51.803, 'ShipID': 1275, 'Name': u'J\xf3n V\xeddal\xedn VE - 82', 'Gear': u'BOTN'}
{'Catch': 7.539, 'ShipID': 1595, 'Name': u'Fr\xe1r VE - 78', 'Gear': u'BOTN'}
{'Catch': 97.984, 'ShipID': 1903, 'Name': u'\xdeorsteinn \xdeH - 360', 'Gear': u'BOTN'}
{'Catch': 94.796, 'ShipID': 1903, 'Name': u'\xdeorsteinn \xdeH - 360', 'Gear': u'BOTN'}
{'Catch': 61.347, 'ShipID': 2020, 'Name': u'Su\xf0urey VE - 12', 'Gear': u'BOTN'}
{'Catch': 21.135, 'ShipID': 2401, 'Name': u'\xde\xf3runn Sveinsd\xf3ttir VE - 401', 'Gear': u'BOTN'}
{'Catch': 16.151, 'ShipID': 2444, 'Name': u'Vestmannaey VE - 444', 'Gear': u'BOTN'}
{'Catch': 41.213, 'ShipID': 2677, 'Name': u'Bergur VE - 44', 'Gear': u'BOTN'}
{'Catch': 5.046, 'ShipID': 2403, 'Name': u'Hvanney SF - 51', 'Gear': u'NET'}
{'Catch': 2.311, 'ShipID': 2403, 'Name': u'Hvanney SF - 51', 'Gear': u'NET'}
{'Catch': 6.304, 'ShipID': 2403, 'Name': u'Hvanney SF - 51', 'Gear': u'NET'}
{'Catch': 4.231, 'ShipID': 2732, 'Name': u'Skinney SF - 20', 'Gear': u'NET'}
{'Catch': 6.46, 'ShipID': 2732, 'Name': u'Skinney SF - 20', 'Gear': u'NET'}
...

此列表已预先排序:

list_sorted = sorted(landingList, key=lambda d:(d['Gear'], d['ShipID']))

这是在冰岛的船舶登陆列表,我想做的是按“齿轮”拆分列表并添加渔获量,以便显示总渔获量。与此类似

“BOTN”列表如下所示:

{'Catch': 6.815, 'ShipID': 173, 'Name': u'Sigur\xf0ur \xd3lafsson SF - 44', 'Gear': u'BOTN'}
{'Catch': 119.266, 'ShipID': 1275, 'Name': u'J\xf3n V\xeddal\xedn VE - 82', 'Gear': u'BOTN'}
{'Catch': 7.539, 'ShipID': 1595, 'Name': u'Fr\xe1r VE - 78', 'Gear': u'BOTN'}
{'Catch': 192.78, 'ShipID': 1903, 'Name': u'\xdeorsteinn \xdeH - 360', 'Gear': u'BOTN'}
{'Catch': 61.347, 'ShipID': 2020, 'Name': u'Su\xf0urey VE - 12', 'Gear': u'BOTN'}
{'Catch': 21.135, 'ShipID': 2401, 'Name': u'\xde\xf3runn Sveinsd\xf3ttir VE - 401', 'Gear': u'BOTN'}
{'Catch': 16.151, 'ShipID': 2444, 'Name': u'Vestmannaey VE - 444', 'Gear': u'BOTN'}
{'Catch': 41.213, 'ShipID': 2677, 'Name': u'Bergur VE - 44', 'Gear': u'BOTN'}

那么“NET”列表将如下所示:

{'Catch': 13.661, 'ShipID': 2403, 'Name': u'Hvanney SF - 51', 'Gear': u'NET'}
{'Catch': 10.691, 'ShipID': 2732, 'Name': u'Skinney SF - 20', 'Gear': u'NET'}

当然还有更多的齿轮和着陆点。但这只是为了演示该列表的外观以及我手头的任务。你能帮我解决这个问题吗?

最佳答案

您可以使用itertools.groupby() function :

from itertools import groupby
from operator import itemgetter

for gear, group in groupby(list_sorted, key=itemgetter('Gear')):
    # group is now an iterator, loop over it to get all items with the same value for Gear.
    # gear is the value of this group's "Gear" key.

关于python - 在 Python 中对字典列表中的数据进行排序和组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13864981/

相关文章:

python - Python 中的正则表达式

python ssh脚本错误

python - 从字典中不等长度的元素形成元组列表

python - 网络爬虫的线程建议 - 使用单个列表进行调度

sorting - Elasticsearch:排序整数降序

arrays - 两个文件之间的外部排序

java - Java 中数组列表出现越界异常错误

Python 2.7 - Linux - 无限循环,放弃 CPU 给其他线程/进程

c# - 使用 LINQ 筛选对象列表

python - Pymongo 的 update_one() 返回带有 AttributeError 的 UpdateResult