我有两本字典。在这两个字典中,每个键的值都是一个列表。如果dictionary 2中任何列表中的任何元素等于dictionary 1的键,我想用dictionary 1列表中的第一个元素替换该元素。在
换句话说,我有:
dict1 = {'IDa':['newA', 'x'], 'IDb':['newB', 'x']}
dict2 = {1:['IDa', 'IDb']}
我想要:
^{pr2}$我试过了:
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']
所以看起来所有替换方法都有效。有没有办法让它成功?将值列表中的整个字符串替换为另一个值列表中的字符串?在
非常感谢你的帮助。在
您也可以使用字典理解,但我不确定它们在Python 2.7中是否有效,它可能仅限于Python 3:
编辑:我刚刚检查过,这是在Python2.7中运行的。但是,dict2.items()应该替换为dict2.iteritems():
^{pr2}$试试这个:
这将打印:
^{pr2}$根据需要。在
解释
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]
)。在例如,如果我们将词典改为:
我们可以得到输出:
因为
'IDc'
不存在于dict1
的键中。在这是一个有趣的!在
或者,这里是没有列表理解的相同逻辑:
^{pr2}$相关问题 更多 >
编程相关推荐