簡體   English   中英

使用相同的鍵合並字典

[英]Merging dictionaries with same keys

我寫了一些python代碼從SQL Server中提取數據,目前正在嘗試合並數據。 我試圖將數據放入一個Dataframe中,然后使用它,但是無法做到這一點。

我設置數據的當前形式是這樣的:

[ { a : { 1 : ( x,y,z,...) }}, 
{ a : { 2 : ( x,y,z,...) }},
{ a : { 3 : ( x,y,z,...) }} ]

這是我想去的地方

[ { a : { 1 : ( x,y,z,...) , 2 : (x,y,...) , 3 : (x,y,z,...) } ]

通過collections.defaultdict使用嵌套的字典結構。

請注意,在此實現中,不允許重復的內部鍵; 例如,您不能有兩個帶有外鍵“ a”和內鍵1的字典。在這種情況下,最后一個將優先。

from collections import defaultdict

lst = [ { 'a' : { 1 : ( 3, 4, 5 ) }}, 
        { 'a' : { 2 : ( 6, 7, 8 ) }},
        { 'a' : { 3 : ( 1, 2, 3 ) }},
        { 'c' : { 4 : ( 5, 9, 8 ) }}, 
        { 'b' : { 1 : ( 6, 6, 8 ) }},
        { 'c' : { 3 : ( 2, 5, 7 ) }}]

d = defaultdict(dict)

for item in lst:
    key = next(iter(item))
    d[key].update(item[key])

# defaultdict(dict,
#             {'a': {1: (3, 4, 5), 2: (6, 7, 8), 3: (1, 2, 3)},
#              'b': {1: (6, 6, 8)},
#              'c': {3: (2, 5, 7), 4: (5, 9, 8)}})

這個怎么樣?

data = [{'a': {1: 4}, 'b': {7: 8}},
        {'a': {2: 5}, 'b': {9: 10}},
        {'a': {3: 6}}]
all_keys = set().union(*data)
result = {}
for key in all_keys:
    result[key] = {}
    for d in data:
        if key in d:
            result[key].update(d[key])

print(result)  # {'b': {7: 8, 9: 10}, 'a': {1: 4, 2: 5, 3: 6}}

您可以使用reduce函數和dict.update來轉換數據。 假設'a'是您唯一的鍵,則可以執行以下操作:

a = [
  {'a': {1: (1, 2, 3)}},
  {'a': {2: (4, 5, 6)}},
  {'a': {3: (7, 8, 9)}}
]

def update(d, c):
  d['a'].update(c['a'])
  return d
print reduce(update, a, {'a':{}}) #Prints {'a': {1: (1, 2, 3), 2: (4, 5, 6), 3: (7, 8, 9)}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM