我的問題與此類似(Python sum on keys for List of Dictionaries),但需要根據兩個或多個鍵值元素對值求和。我有一個字典串列如下:
list_to_sum=
[{'Name': 'A', 'City': 'W','amt':100},
{'Name': 'B', 'City': 'A','amt':200},
{'Name': 'A', 'City': 'W','amt':300},
{'Name': 'C', 'City': 'X','amt':400},
{'Name': 'C', 'City': 'X','amt':500},
{'Name': 'A', 'City': 'W','amt':600}]
因此,基于 Name 和 City 鍵值的組合,amt 應該相加。請讓我知道如何解決這個問題。
Output: [{'Name': 'A', 'City': 'W','amt':900},
{'Name': 'B', 'City': 'A','amt':200},
{'Name': 'C', 'City': 'X','amt':900}]
uj5u.com熱心網友回復:
您可以創建一個.然后您可以使用元組作為鍵collections.Counter簡單地添加值:(Name, City)
from collections import Counter
list_to_sum=[
{'Name': 'A', 'City': 'W','amt':100},
{'Name': 'B', 'City': 'A','amt':200},
{'Name': 'A', 'City': 'W','amt':300},
{'Name': 'C', 'City': 'X','amt':400},
{'Name': 'C', 'City': 'X','amt':500},
{'Name': 'A', 'City': 'W','amt':600}
]
totals = Counter()
for d in list_to_sum:
totals[(d['Name'],d['City'])] = d['amt']
print(totals[('A','W')]) # 1000
print(totals[('B','A')]) # 200
print(totals[('C','X')]) # 900
這將產生一個類似字典的物件Counter:
Counter({('A', 'W'): 1000, ('B', 'A'): 200, ('C', 'X'): 900})
有了這個,您可以將 dict 轉換回 dicts 串列,例如:
sums_list = [{'Name':Name, 'City':City, 'amt':amt} for (Name, City), amt in totals.items()]
給sums_list:
[{'Name': 'A', 'City': 'W', 'amt': 1000},
{'Name': 'B', 'City': 'A', 'amt': 200},
{'Name': 'C', 'City': 'X', 'amt': 900}]
uj5u.com熱心網友回復:
list_to_sum = [{'Name': 'A', 'City': 'W', 'amt': 100},
{'Name': 'B', 'City': 'A', 'amt': 200},
{'Name': 'A', 'City': 'W', 'amt': 300},
{'Name': 'C', 'City': 'X', 'amt': 400},
{'Name': 'C', 'City': 'X', 'amt': 500},
{'Name': 'A', 'City': 'W', 'amt': 600}]
sum_store = {}
for entry in list_to_sum:
key = (entry['Name'], entry['City'])
if key in sum_store:
sum_store[key] = entry['amt']
else:
sum_store[key] = entry['amt']
print(sum_store)
輸出:
{('A', 'W'): 1000, ('B', 'A'): 200, ('C', 'X'): 900}
uj5u.com熱心網友回復:
除了其他人提出的答案之外,它可以在熊貓單線中完成。它按名稱和城市對行進行分組,并計算其 amt 特征的總和。
import pandas as pd
list_to_sum=[
{'Name': 'A', 'City': 'W','amt':100},
{'Name': 'B', 'City': 'A','amt':200},
{'Name': 'A', 'City': 'W','amt':300},
{'Name': 'C', 'City': 'X','amt':400},
{'Name': 'C', 'City': 'X','amt':500},
{'Name': 'A', 'City': 'W','amt':600}
]
df = pd.DataFrame(list_to_sum)
t = df.groupby(['Name','City']).amt.sum()
print(t)
Output:
Name City
A W 400
B A 200
C X 900
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/513616.html
標籤:Python列表字典
