用另一个字典中的键替换一个字典中的值

时间:2017-03-09 09:40:48

标签: python dictionary

我有两本词典:

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]]的密钥相关联的值 - 显然我的代码可能更有效率。

由于

3 个答案:

答案 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