Python 将一个字典中的值替换为另一个字典中的键

Python 将一个字典中的值替换为另一个字典中的键,python,dictionary,Python,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[

我有两本字典:

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[895111]],1.0:[2,1],2.0:[100800],[200400]

这就是我取得的成绩:

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_rev = {v:k for k,v in a.items()}
因此:

请注意,如果dict one中有重复的值,则此项无法工作。对于您的问题,键必须是唯一的


不过,这取决于您如何提高效率。这是另一个问题。

您可以创建一个反向dict\u 1,以使用键而不是值

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

请注意,如果dict one中有重复的值,则此项无法工作。对于您的问题,键必须是唯一的


不过,这取决于您如何提高效率。这是另一个问题。

假设
dict_1
中的值是唯一的,您可以通过将列表转换为元组来反转它。然后您可以使用dict comprehension和嵌套列表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理解和嵌套列表理解来创建最终结果:

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 = {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
这应该起作用:

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

你不是已经在变量
节点中有了
dict_1
的键吗?@Kendas ahah我是瞎的。这是真的。dict_1[??]应该只是“节点”…因为迭代一个字典就等于迭代它的键…而且,
dict_1[x]
是获取与dict
dict_1
中的键
x
相关的值的操作。另外,您可以通过对键执行
,对dict_1中的值进行迭代。items():
在变量
节点中是否已经有一个
dict_1
的键?@Kendas ahah i是盲的。确实如此。dict_1[?],应该只是“node”…因为迭代一个dictionnarie与迭代它的键是一样的…而且,
dict_1[x]
是获取与dict
dict_1
中的键
x
关联的值的操作。另外,您可以通过对dict_1中的键、值执行
来迭代这两个操作。items():
即将发布相同的^^即将发布相同的^^