如何使用Python中的公共键将值映射到值

时间:2012-06-06 06:42:42

标签: python

在下面的词典中,我想检查aa中的值是否与bb中的值匹配,并生成aa键到bb键的映射。我需要重新排列词典吗?我从制表符分隔文件导入数据,所以我没有附加到词典。请注意,aa比bb大100倍(aa为100k行),但这种情况不经常和离线运行。

输入:

aa = {1: 'a', 3: 'c', 2 : 'b', 4 : 'd'}
bb = {'apple': 'a', 'pear': 'b', 'mango' : 'g'}

期望的输出(或任何类似的数据结构):

dd = {1 : 'apple', 2 : 'pear'}

2 个答案:

答案 0 :(得分:3)

aa = {1:'a', 3:'c', 2:'b', 4:'d'}
bb = {'apple':'a', 'pear':'b', 'mango': 'g'}

bb_rev = dict((value, key)
    for key, value in bb.iteritems()) # bb.items() in python3
dd = dict((key, bb_rev[value])
    for key, value in aa.iteritems() # aa.items() in python3
    if value in bb_rev)

print dd

答案 1 :(得分:0)

您可以这样做:

>>> aa = {1: 'a', 3: 'c', 2 : 'b', 4 : 'd'}
>>> bb = {'apple': 'a', 'pear': 'b', 'mango' : 'g'}
>>> tmp = {v: k for k, v in bb.iteritems()}
>>> dd = {k: tmp[v] for k, v in aa.iteritems() if v in tmp} 
 >>> dd
{1: 'apple', 2: 'pear'}

但请注意,只有当aa字典的每个值都显示为bb字典的值一次或根本不显示时,此功能才会生效。