将具有相同键的所有数据从字典中提取到另一个数组中

时间:2012-03-27 04:47:33

标签: python python-2.7

我只是想知道一种简单的方法,可以将相同的键"Cat"中的所有数据从字典中提取到另一个数组中。

从下面的字典.. 密钥"Cat: Book"的所有数据应位于单独的数组中,密钥"Cat: pen"位于另一个数组中。 这本词典是动态的,可以有更多不同的"Cat"值。

category= [{'Cat':'Book','Item':'LongBook','Qty':'25'}, 
           {'Cat':'Book','Item':'Diary','Qty':'20'}, 
           {'Cat':'Pen','Item':'BallPoint','Qty':'30'}]

1 个答案:

答案 0 :(得分:2)

很难理解你真正需要什么。无论如何,试着看一下uses defaultdict

的以下代码
category= [{'Cat':'Book','Item':'LongBook','Qty':'25'}, 
           {'Cat':'Book','Item':'Diary','Qty':'20'}, 
           {'Cat':'Pen','Item':'BallPoint','Qty':'30'}]

from collections import defaultdict

output = defaultdict(list)

for row in category:
    output['Cat' + ':' + row['Cat']].append(row)

print output.values()

>>>[[{'Item': 'BallPoint', 'Qty': '30', 'Cat': 'Pen'}], [{'Item': 'LongBook', 'Qty': '25', 'Cat': 'Book'}, {'Item': 'Diary', 'Qty': '20', 'Cat': 'Book'}]]

或更好use groupby

category= [{'Cat':'Book','Item':'LongBook','Qty':'25'}, 
           {'Cat':'Book','Item':'Diary','Qty':'20'}, 
           {'Cat':'Pen','Item':'BallPoint','Qty':'30'}]

from itertools import groupby

for key, vals in groupby(category, lambda x: x['Cat']):
    print key, list(vals)

>>>Book [{'Item': 'LongBook', 'Qty': '25', 'Cat': 'Book'}, {'Item': 'Diary', 'Qty': '20', 'Cat': 'Book'}]
>>>Pen [{'Item': 'BallPoint', 'Qty': '30', 'Cat': 'Pen'}]