繁体   English   中英

按值分组 python 字典列表

[英]Group python list of dictionaries by values

鉴于我有一个字典列表,我想创建新的列表列表,按“价格”的值对字典进行分组:

dicts = [
     { "name": "item1", "price": 10 },
     { "name": "item2", "price": 5 },
     { "name": "item3", "price": 10 },
     { "name": "item4", "price": 12 },
     { "name": "item5", "price": 12 },
     { "name": "item6", "price": 5 }
 ]

应该创建:

grouped_dicts = [
     [{ "name": "item1", "price": 10 },
     { "name": "item3", "price": 10 }],
     [{ "name": "item2", "price": 5 },
     { "name": "item6", "price": 5 }],
     [{ "name": "item4", "price": 12 },
     { "name": "item5", "price": 12 }]
]

有这样做的好方法吗?

谢谢

你可以使用deaultdict

from collections import defaultdict
d=defaultdict(list)
for item in dicts:
        d[list(item.values())[-1]].append(item) 

Output:

defaultdict(list,
            {10: [{'name': 'item1', 'price': 10},
              {'name': 'item3', 'price': 10}],
             5: [{'name': 'item2', 'price': 5}, {'name': 'item6', 'price': 5}],
             12: [{'name': 'item4', 'price': 12},
              {'name': 'item5', 'price': 12}]})

如果您只需要列表,则只需提取 defaultdict 的值

list(d.values())

Output:

[[{'name': 'item1', 'price': 10}, {'name': 'item3', 'price': 10}],
 [{'name': 'item2', 'price': 5}, {'name': 'item6', 'price': 5}],
 [{'name': 'item4', 'price': 12}, {'name': 'item5', 'price': 12}]]

作为上述答案的替代方案,以下是您在没有额外导入的情况下如何做到这一点:

d = {}

for item in dicts:
    d.setdefault(item['price'], []).append(item)

list(d.values())

出去:

[[{'name': 'item1', 'price': 10}, {'name': 'item3', 'price': 10}],
 [{'name': 'item2', 'price': 5}, {'name': 'item6', 'price': 5}],
 [{'name': 'item4', 'price': 12}, {'name': 'item5', 'price': 12}]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM