在下面的词典中,我想检查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'}
答案 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
字典的值一次或根本不显示时,此功能才会生效。