簡體   English   中英

合並字典與重復

[英]Merge dictionary with recurrence

我有一個循環:

all_rec = {}
for i in range(0, 2):
     rec = buildings[best_buildings[i]]['recommendations']

第一次迭代后 'rec' 的值:

rec = {'a': {'b': 2, 'c': 1}, 'd': {'e': 5}}

第二次迭代后'rec'的值:

rec = {'d': {'e': 4}}

'recommendations' 的數據類型是字典。 如何將此循環產生的所有“rec”字典添加到一個字典“all_rec”中?

我希望 'all_rec' 看起來像這樣:

all_rec = {'a': {'b': 2, 'c': 1}, 'd': {'e': 5}, 'd': {'e': 4}}  

將 'd': {'e': 5} 和 'd': {'e': 4} 保留在新字典中。 如何在 Python 2.7 中做到這一點?

如果您需要保留所有這些值,建議下層字典中的值應該是列表,至少對於摘要列表:

all_rec = {}
for i in range(0, 2):
     rec = buildings[best_buildings[i]]['recommendations']
     for dk, dc in rec.items():
         if dk not in all_rec:
             all_rec[dk] = {k:[v] for k,v in dc.items()}
         else:
             for k,v in dc.items():
                 if k in all_rec[dk]:
                     all_rec[dk][k].append(v)
                 else:
                     all_rec[dk][k] = [v]

print(all_rec)
{'a': {'b': [2], 'c': [1]}, 'd': {'e': [5,4]}}

這是 Python 3.7; 我不知道您需要如何調整才能使用 2.7,但我盡可能保持基本。

我沒有你的數據,但這是一個粗略的想法:

如果您想總結建議:

from collections import defaultdict

all_rec = defaultdict(lambda: defaultdict(int))
for i in range(0, 2):
     rec[buildings[best_buildings[i]]] += buildings[best_buildings[i]]['recommendations']

如果要 append 建議:

from collections import defaultdict

all_rec = defaultdict(lambda: defaultdict(list))
for i in range(0, 2):
     rec[buildings[best_buildings[i]]].append(buildings[best_buildings[i]]['recommendations'])

--- 演示

>>> from collections import defaultdict
>>> 
>>> demo = defaultdict(lambda: defaultdict(int))
>>> demo['a']['b'] += 1
>>> demo
defaultdict(<function <lambda> at 0x7f931a2d2700>, {'a': defaultdict(<class 'int'>, {'b': 1})})
>>> demo['a']['b'] += 1
>>> demo
defaultdict(<function <lambda> at 0x7f931a2d2700>, {'a': defaultdict(<class 'int'>, {'b': 2})})
>>> 
>>> demo = defaultdict(lambda: defaultdict(list))
>>> demo['a']['b'].append(1)
>>> demo
defaultdict(<function <lambda> at 0x7f931a2d2b80>, {'a': defaultdict(<class 'list'>, {'b': [1]})})
>>> demo['a']['b'].append(1)
>>> demo
defaultdict(<function <lambda> at 0x7f931a2d2b80>, {'a': defaultdict(<class 'list'>, {'b': [1, 1]})})
>>> 

暫無
暫無

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

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