按值将python字典列表分组

时间:2019-09-27 18:02:55

标签: python python-2.7 list dictionary

鉴于我有一个字典列表,我想创建一个新的列表列表,这些列表将字典按“ price”的值分组:

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 }]
]

有没有很好的方法?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用deaultdict

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

输出:

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())

输出:

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

答案 1 :(得分:1)

作为answer above的替代方法,这是您无需额外导入即可执行的操作:

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}]]