簡體   English   中英

如何根據另一個字典中指定給相同鍵的值來更改字典鍵?

[英]How to Change a Dictionaries Key Based on the Value Designated to the Same Key in Another Dictionary?

我正在嘗試使用另一個字典中的鍵值對更新字典鍵。 我要合並的兩個字典都嵌套在列表中:

dictionary1 = [{ '32639': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '41526': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}]

dictionary2 = [{'32639':'90283'}, {'49034': '89203'}, {'28942': '39024'}, {'41526':'24903'} ]

我希望生成的字典看起來完全像dictionary1,但是如果dictionary1中字典的關鍵字在dictionary2中字典的關鍵字中,則應該對其進行更改。

結果字典:

new_dictionary = [{ '90283': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '24903': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}]

我嘗試過:

list1 = []
for d1, d2 in zip(dictionary1, dictionary2):
    for key, value in d1.iteritems():
        new_dict = {}
        if key in d2:
            new_dict[d2[key]] = value
            list1.append(new_dict)
        else:
            new_dict[key] = value
            list1.append(new_dict)

但是,它不起作用,但是在此示例數據上卻起作用,但是該程序僅基於dictionary2的長度來循環訪問dictionary1。 因此,我嘗試使用包含841個詞典(詞典1)的列表和53個詞典(詞典2)的列表來運行此列表,並且它只會在退出之前轉換詞典1中的前53個鍵。

嘗試這樣的事情:

ds1 = [{ '32639': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '41526': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}]

ds2 = [{'32639':'90283'}, {'49034': '89203'}, {'28942': '39024'}, {'41526':'24903'} ]

def trans(ds1, ds2):
    for d1 in ds1:
        for d2 in ds2:
            ckeys = d1.keys() & d2.keys()
            ukeys = d1.keys() - d2.keys()
            for ck in ckeys:
                yield (d2[ck], d1[ck])
            for uk in ukeys:
                yield (uk, d1[uk])
print(dict(trans(ds1, ds2)))

我得到了輸出:

{'90283': {'78549': {'526': {'sum': 8930.4, 'min': 2380, 'max': 74839}}}, '32639': {'78549': {'526': {'sum': 8930.4, 'min': 2380, 'max': 74839}}}, '89304': {'20384': {'152': {'sum': 51235.2, 'min': 4512, 'max': 362.69}}}, '41526': {'45315': {'364': {'sum': 8985.65, 'min': 3632.32, 'max': 4558.15}}}, '24903': {'45315': {'364': {'sum': 8985.65, 'min': 3632.32, 'max': 4558.15}}}}

暫無
暫無

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

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