我制作了一個回圈,以以下格式為我提供資料:
name_quant = [{'name_id': 'S00004', 'quantity': '1'}, {'name_id': 'S00004', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '1'},
{'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00002', 'quantity': '1'}]
我使用以下回圈來獲取上述值:
namesequence = EventSequence.objects.filter(description="names").values("Details")
name_quant = [{ 'name_id': e['element'][33:39],
'quantity': e['element'][50:51] } for e in namesequence ]
所以我的問題是如何聚合 name_ids 并對匹配 name_ids 的數量求和,以便得到如下結果:
name_sum = [{'name_id': 'S00001', 'quantity': '160'}, {'name_id': 'S00002', 'quantity': '50'}, {'name_id': 'S00003', 'quantity': '40'}, {'name_id': 'S00004', 'quantity': '90'}]
我會在 Django 中使用 sum 函式,但我必須先下標并回圈通過值,這使得它有點復雜。
uj5u.com熱心網友回復:
如果我正確理解了這個問題,看起來要求是按數量合并鍵(name_id)。我看不出所需的輸出值是如何從樣本輸入資料中得出的,但這可能是因為它不完整。
name_quant = [{'name_id': 'S00004', 'quantity': '1'}, {'name_id': 'S00004', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '1'},
{'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00002', 'quantity': '1'}]
td = dict()
for e in name_quant:
nid = e['name_id']
td[nid] = td.get(nid, 0) int(e['quantity'])
new_list = [{'name_id': k, 'quantity': str(v)} for k, v in td.items()]
print(new_list)
輸出:
[{'name_id': 'S00004', 'quantity': '3'}, {'name_id': 'S00003', 'quantity': '5'}, {'name_id': 'S00002', 'quantity': '1'}]
uj5u.com熱心網友回復:
如果name_quant的串列很大,我更喜歡用pandas來做groupby人員:
import pandas as pd
name_quant = [{'name_id': 'S00004', 'quantity': '1'}, {'name_id': 'S00004', 'quantity': '2'},
{'name_id': 'S00003', 'quantity': '1'},
{'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '2'},
{'name_id': 'S00002', 'quantity': '1'}]
df = pd.DataFrame.from_records(name_quant)
df['quantity'] = df['quantity'].astype(int)
results = df.groupby(['name_id']).agg({'quantity': 'sum'}).to_records() # [('S00002', 1) ('S00003', 5) ('S00004', 3)]
grouped_name_quant = [{'name_id': x[0], 'quantity': x[1]} for x in results]
print(grouped_name_quant)
輸出是:
[{'name_id': 'S00002', 'quantity': 1}, {'name_id': 'S00003', 'quantity': 5}, {'name_id': 'S00004', 'quantity': 3}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473216.html
