簡體   English   中英

用另一本詞典中的鍵替換一個詞典中的值

[英]Replacing values in one dictionary with the keys in another dictionary

我有兩個字典:

dict_1 = {0:[300,650], 1:[420,800], 2:[700,400]}
dict_2 =  {0.0: [[300,650], [895, 111]], 1.0: [[700, 400], [420, 800]], 2.0: [[100, 800], [200, 400]]

如果在一個值dict_1等於在在列表中的值之一dict_2然后在值dict_2必須與對應於在值的鍵來代替dict_1

從以上字典中,我想要的輸出是:

dict_2 = {0.0: [0, [895, 111]], 1.0: [2, 1], 2.0: [[100, 800], [200, 400]]

這是我走了多遠:

x = 0
for i in dict_2:
    for node in dict_1:
        if dict_2[x][0] == dict_1[x]:
            dict_2[x][0] = dict_1[???]
        if dict_2[x][1] == dict_1[x]:
            dict_2[x][1] = dict_1[???]
    x+=1

我真正dict_1是如何調用dict_1的鍵,而不是與dict_1的鍵關聯的值-顯然我的代碼可能會更高效。

謝謝

假設dict_1中的值是唯一的,則可以通過將列表轉換為元組來反轉它。 然后,您可以將dict comprehension與嵌套列表推導一起使用以創建最終結果:

dict_1 = {0:[300,650], 1:[420,800], 2:[700,400]}
dict_2 =  {0.0: [[300,650], [895, 111]], 1.0: [[700, 400], [420, 800]], 2.0: [[100, 800], [200, 400]]}

inverse = {tuple(v): k for k, v in dict_1.items()}
res = {k: [inverse.get(tuple(l), l) for l in v] for k, v in dict_2.items()}
print(res)

輸出:

{0.0: [0, [895, 111]], 1.0: [2, 1], 2.0: [[100, 800], [200, 400]]}

您可以創建一個反向的dict_1以使其具有鍵而不是值。

dict_1_rev = {v:k for k,v in a.items()}

所以:

x = 0
for i in dict_2:
    for node in dict_1:
        if dict_2[x][0] == dict_1[x]:
            dict_2[x][0] = dict_1_rev[dict_1[x]]
        if dict_2[x][1] == dict_1[x]:
            dict_2[x][1] = dict_1_rev[dict_1[x]]
    x+=1

請注意,如果您在字典一中有重復的值,則此方法不起作用。 鍵對於您的問題必須是唯一的。

不過,您有責任提高效率。 那是另一個問題。

這應該工作:

dict_1 = {0:[300,650], 1:[420,800], 2:[700,400]}
dict_2 =  {0.0: [[300,650], [895, 111]], 1.0: [[700, 400], [420, 800]], 2.0: [[100, 800], [200, 400]]}

for key_2 in dict_2:
    for key_1 in dict_1:
        for i in range(0, len(dict_2[key_2])): # In case you change the dimension of dict_2
            if dict_2[key_2][i] == dict_1[key_1]:
                dict_2[key_2][i] = key_1

暫無
暫無

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

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