![](/img/trans.png)
[英]How to Group Json data based on Key and combine values under in Python?
[英]How can I combine values based on some key in python dict just like SQL GROUP BY
L = [{'id':1, 'quantity':1}, {'id':2, 'quantity':2}, {'id':1, 'quantity':3}]
我想基於id添加數量
因此,對於上面的列表,我希望輸出為:
[{'id':1,'quantity':4},{'id':2,'quantity':2}]
另一個例子:
L = [{'id':1, 'quantity':1}, {'id':2, 'quantity':2}, {'id':1, 'quantity':2}, {'id':1, 'quantity':3}]
因此,對於上面的列表,我希望輸出為:
[{'id':1, 'quantity':6}, {'id':2, 'quantity':2}]
在python中, “分組依據”功能可以通過itertools.groupby()
函數實現:
import itertools
l = [{'id':1, 'quantity':1}, {'id':2, 'quantity':2}, {'id':1, 'quantity':3}]
result = [ {'id': k, 'quantity': sum(_['quantity'] for _ in g)}
for k,g in itertools.groupby(sorted(l, key=lambda x:x['id']), key=lambda x:x['id'])]
print(result)
輸出:
[{'id': 1, 'quantity': 4}, {'id': 2, 'quantity': 2}]
這應該做您想要的:
from collections import defaultdict
def combine(items):
counts = defaultdict(int)
for d in items:
counts[d["id"]] += d["quantity"]
return [{"id": id, "quantity": q} for id, q in counts.items()]
例子:
>>> combine([{'id':1, 'quantity':1}, {'id':2, 'quantity':2}, {'id':1, 'quantity':3}])
[{'quantity': 4, 'id': 1}, {'quantity': 2, 'id': 2}]
>>> combine([{'id':1, 'quantity':1}, {'id':2, 'quantity':2}, {'id':1, 'quantity':2}, {'id':1, 'quantity':3}])
[{'quantity': 6, 'id': 1}, {'quantity': 2, 'id': 2}]
這與您將要獲得的一樣簡單和高效。
將其轉換為dataframe
,然后返回到dict
import pandas as pd
L = [{'id':1, 'quantity':1}, {'id':2, 'quantity':2}, {'id':1, 'quantity':3}]
output=pd.DataFrame(L).groupby('id')['quantity'].sum().to_dict()
假設輸入定義正確,這里我以一種直觀的方式實現了這一點:
output = {}
keys=[]
for e in L:
if e['id'] not in keys:
keys.append(e['id'])
output[e['id']] = e['quantity']
else:
output[e['id']] += e['quantity']
[{'id':key,'identity':values} for key,values in output.items()]
我實際上在想是否還有其他要求,例如,您需要更高的效率來執行大量數據? 如果是,則此方法似乎很乏味。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.