我有两本字典。在这两个字典中,每个键的值都是一个列表。如果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
中相应列表的第一个条目,前提是我们可以在dict1
(dict1[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/