2012-06-06 3 views
0

В нижеуказанных словарях я хочу проверить, соответствует ли значение в aa значению в bb и отображает ключи от aa к ключам bb. Нужно ли переупорядочить словари? Я импортирую данные из разделенного вкладками файла, поэтому я не привязан к словарям. Обратите внимание, что aa примерно в 100 раз больше, чем bb (100k строк для aa), но это нужно запускать нечасто и офлайн.Как сопоставить значения с значениями с общим ключом в Python

Вход:

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

Желаемая выход (или любая подобная структура данных):

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

Это отображение ключей, имеющих общие значения, а не наоборот. – mata

+1

Может ли быть дубликат в значениях как в 'aa', так и' bb'? Я не знаю семантики данных, но можете ли вы обменять ключи со значением как в 'aa', так и' bb'? – Vikas

ответ

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 
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 словарь либо один раз, либо вовсе.

Смежные вопросы