我有 4 個字典串列,每個串列包含 4 個字典。串列看起來與此類似:
A = [
{'1': 150, '2': 160, '3': 140, '4': 110},
{'1': 230, '2': 650, '3': 134, '4': 650},
{'1': 220, '2': 530, '3': 980, '4': 3450},
{'1': 150, '2': 160, '3': 440, '4': 110}]
B = [
{'1': 165, '2': 430, '3': 134, '4': 650},
{'1': 64, '2': 650, '3': 345, '4': 340},
{'1': 220, '2': 650, '3': 340, '4': 134},
{'1': 150, '2': 160, '3': 234, '4': 2340}]
C = [
{'1': 678, '2': 430, '3': 134, '4': 650},
{'1': 344, '2': 650, '3': 345, '4': 340},
{'1': 220, '2': 650, '3': 340, '4': 134},
{'1': 150, '2': 160, '3': 234, '4': 2340}]
D = [
{'1': 165, '2': 430, '3': 134, '4': 650},
{'1': 64, '2': 650, '3': 345, '4': 340},
{'1': 220, '2': 650, '3': 340, '4': 134},
{'1': 150, '2': 160, '3': 234, '4': 1440}]
我想總結每個串列的第一個字典的值,其中鍵是相同的(所以對于鍵'1',然后是'2',然后是'3'等等......),以及其余串列的第一個字典的值,不使用 Pandas。
然后對第二,第三和第四個字典做同樣的事情。
預期的結果應該是 4 個字典,它們保持鍵的順序,同時匯總相同鍵的值。
我已經嘗試了下面的代碼:
for i in range (4):
dict1 = A[i]
dict2 = B[i]
dict3 = C[i]
dict4 = D[i]
# adding the values with common key
Cdict = Counter(dict1) Counter(dict2) Counter(dict3) Counter(dict4)
print(Cdict)
但問題是鍵的順序正在改變:
Counter({'3': 1443, '1': 1248, '2': 1111, '4': 709})
Counter({'1': 1544, '2': 1273, '4': 1204, '3': 1110})
Counter({'1': 5210, '3': 1273, '4': 1248, '2': 1141})
Counter({'2': 891, '1': 784, '3': 646, '4': 581})
uj5u.com熱心網友回復:
IIUC 這很簡單。您只需撰寫一個函式來總結每個鍵的所有值。然后將其應用于字典串列的轉置串列。
def sum_by_key(dicts):
result = {}
for d in dicts:
for k, v in d.items():
result[k] = result.get(k, 0) v
return result
lists_of_dicts = [[{1:2, 3:4}, {1:10, 2:9}], [{3:8, 2:4}, {3:1, 2:5}]]
result = [sum_by_key(dicts) for dicts in zip(*lists_of_dicts)]
print(result)
(lists_of_dicts將[A, B, C, D]與您的變數一起使用)
輸出:
[{1: 2, 3: 12, 2: 4}, {1: 10, 2: 14, 3: 1}]
編輯:使用您的新樣本資料
lists_of_dicts = [A, B, C, D]
result = [sum_by_key(dicts) for dicts in zip(*lists_of_dicts)]
print(result)
生產
[{'1': 1158, '2': 1450, '3': 542, '4': 2060}, {'1': 702, '2': 2600, '3': 1169, '4': 1670}, {'1': 880, '2': 2480, '3': 2000, '4': 3852}, {'1': 600, '2': 640, '3': 1142, '4': 6230}]
uj5u.com熱心網友回復:
我使用 numpy。順便說一句,我認為你給出的結果是不正確的,我從下面的代碼中得到的是:
results:
{'1': 1158, '2': 1450, '3': 542, '4': 2060}
{'1': 702, '2': 2600, '3': 1169, '4': 1670}
{'1': 880, '2': 2480, '3': 2000, '4': 3852}
{'1': 600, '2': 640, '3': 1142, '4': 6230}
import numpy as np
A = [
{'1': 150, '2': 160, '3': 140, '4': 110},
{'1': 230, '2': 650, '3': 134, '4': 650},
{'1': 220, '2': 530, '3': 980, '4': 3450},
{'1': 150, '2': 160, '3': 440, '4': 110}]
B = [
{'1': 165, '2': 430, '3': 134, '4': 650},
{'1': 64, '2': 650, '3': 345, '4': 340},
{'1': 220, '2': 650, '3': 340, '4': 134},
{'1': 150, '2': 160, '3': 234, '4': 2340}]
C = [
{'1': 678, '2': 430, '3': 134, '4': 650},
{'1': 344, '2': 650, '3': 345, '4': 340},
{'1': 220, '2': 650, '3': 340, '4': 134},
{'1': 150, '2': 160, '3': 234, '4': 2340}]
D = [
{'1': 165, '2': 430, '3': 134, '4': 650},
{'1': 64, '2': 650, '3': 345, '4': 340},
{'1': 220, '2': 650, '3': 340, '4': 134},
{'1': 150, '2': 160, '3': 234, '4': 1440}]
group_list = [A,B,C,D]
items_num = len(A)
results = []
for i in range(items_num):
cur_item_dict = dict()
for key in A[0].keys():
cur_item_dict[key] = np.sum([ls[i][key] for j, ls in enumerate(group_list)])
results.append(cur_item_dict)
print('results:')
for res in results:
print(res)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434044.html
上一篇:Laravel在Model上定義了一個帶有值的默認鍵
下一篇:C#過濾器串列,全部或具有給定值
