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]
是获取与dictdict_1
中的键x
相关的值的操作。另外,您可以通过对键执行,对dict_1中的值进行迭代。items():
在变量节点中是否已经有一个dict_1
的键?@Kendas ahah i是盲的。确实如此。dict_1[?],应该只是“node”…因为迭代一个dictionnarie与迭代它的键是一样的…而且,dict_1[x]
是获取与dictdict_1
中的键x
关联的值的操作。另外,您可以通过对dict_1中的键、值执行来迭代这两个操作。items():
即将发布相同的^^即将发布相同的^^