我有两本词典:
devenv /resetsettings
如果Start menu -> Run
中的值等于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
中的值必须替换为与{{{}}中的值对应的KEY 1}}。
从上面的词典中我想要的输出是:
dict_2
这是我走了多远:
dict_2
我真正挣扎的是如何调用dict_1
的密钥而不是与dict_2 = {0.0: [0, [895, 111]], 1.0: [2, 1], 2.0: [[100, 800], [200, 400]]
的密钥相关联的值 - 显然我的代码可能更有效率。
由于
答案 0 :(得分:3)
假设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]]}
答案 1 :(得分:0)
您可以创建一个反转的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 one中有重复值,则无法使用此功能。键必须是您的问题所独有的。
尽管如此,还是要让它更有效率。那是另一个问题。
答案 2 :(得分:0)
这应该有效:
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