我有两本字典。在这两个字典中,每个键的值都是一个列表。如果dictionary 2中任何列表中的任何元素都等于dictionary 1的键,我想用dictionary 1列表中的第一个元素替换该元素。
换句话说,我有:

dict1 = {'IDa':['newA', 'x'], 'IDb':['newB', 'x']}
dict2 = {1:['IDa', 'IDb']}

我想要:
dict2 = {1:['newA', 'newB']}

我试过:
for ID1, news in dict1.items():
    for x, ID2s in dict2.items():
        for ID in ID2s:
            if ID == ID1:
                print ID1, 'match'
                ID.replace(ID, news[0])

for k, v in dict2.items():
    print k, v

我得到了:
IDb match
IDa match
1 ['IDa', IDb']

所以看起来所有的替换方法都在工作。有办法让这一切顺利吗?要用另一个值列表中的字符串替换值列表中的整个字符串吗?
非常感谢你的帮助。

最佳答案

试试这个:

dict1 = {'IDa':['newA', 'x'], 'IDb':['newB', 'x']}
dict2 = {1:['IDa', 'IDb']}

for key in dict2.keys():
    dict2[key] = [dict1[x][0] if x in dict1.keys() else x for x in dict2[key]]

print dict2

这将打印:
{1: ['newA', 'newB']}

根据需要。
解释
dict.keys()只给我们一本字典的键(即,只给冒号的左边)。当我们使用for key in dict2.keys()时,目前我们唯一的键是1。如果字典再大一点,它就会把所有的钥匙都翻一遍。
下一行使用list comprehension-我们知道dict2[key]给了我们一个列表(冒号的右侧),因此我们循环遍历列表中的每个元素(for x in dict2[key]),并返回dict1中相应列表的第一个条目,前提是我们可以在dict1dict1[x][0] if x in dict1.keys)的键中找到元素,否则不触及该元素([else x])。
例如,如果我们将字典更改为:
dict1 = {'IDa':['newA', 'x'], 'IDb':['newB', 'x']}
dict2 = {1:['IDa', 'IDb'], 2:{'IDb', 'IDc'}}

我们会得到输出:
{1: ['newA', 'newB'], 2: ['newB', 'IDc']}

因为'IDc'键不存在dict1

关于python - 如果dict2值= dict1键,则用dict1值替换整个dict2值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42164683/

10-12 16:03