如果dict2 value=dict1键,则用dict1 value替换整个dict2值

2024-05-12 23:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两本字典。在这两个字典中,每个键的值都是一个列表。如果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']

所以看起来所有替换方法都有效。有没有办法让它成功?将值列表中的整个字符串替换为另一个值列表中的字符串?在

非常感谢你的帮助。在


Tags: inid元素列表fordictionary字典match
3条回答

您也可以使用字典理解,但我不确定它们在Python 2.7中是否有效,它可能仅限于Python 3:

# Python 3
dict2 = {k: [dict1.get(e, [e])[0] for e in v] for k,v in dict2.items()}

编辑:我刚刚检查过,这是在Python2.7中运行的。但是,dict2.items()应该替换为dict2.iteritems():

^{pr2}$

试试这个:

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

这将打印:

^{pr2}$

根据需要。在

解释

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的键中。在

这是一个有趣的!在

dict2[1] = [dict1[val][0] if val in dict1 else val for val in dict2[1]]

或者,这里是没有列表理解的相同逻辑:

^{pr2}$

相关问题 更多 >