[英]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.