более быстрый способ сравнения словарей, чем набор - PullRequest
1 голос
/ 28 декабря 2011

У меня есть два больших словаря с уникальными ключами, но возможно с перекрывающимися значениями.Я хочу сравнить каждый набор значений словаря друг с другом и найти количество совпадений.Я сделал это, используя два for цикла и set, но мне интересно, есть ли более быстрый / более элегантный способ сделать это.

dic1 = {'a': ['1','2','3'], 'b':['4','5','6'], 'c':['7','8','9']}
dic2 = {'d': ['1','8','9'], 'e':['10','11','12'], 'f':['7','8','9']}

final_list=[]
for key1  in dic1:
    temp=[]    
    for key2 in dic2:
        test  = set(dic1[key1])
        query = set(dic2[key2])
        x = len(test & query)
        temp.append( [key2, x] )
    final_list.append([key1, temp])

1 Ответ

2 голосов
/ 28 декабря 2011

Вы хотите "инвертировать" один (или оба) из ваших словарей.

val1 = defaultdict(list)
for k in dic1:
    for v in dic1[k]:
        val[v].append( k )
# val1 is a dictionary with each value mapped to the list of keys that contain that value.

for k in dic2: 
    for v in dic2[k]:
        val1[v] is the list of all keys in dic1 that have this value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...