Словарь головоломки

1

Ладно, так... У меня есть некоторые словари ниже, которые не хотят сотрудничать. Словарь "a" представляет данные, хранящиеся в нашей базе данных HR. Словарь "b" представляет данные, хранящиеся в данных AS400 iSeries. ПРИМЕЧАНИЕ. ЭТИ НЕ ИСТИННЫЕ ЦЕННОСТИ. Цель состоит в том, чтобы сопоставить ключ в "a" с ключом в "b", используя по меньшей мере 2 поля, сохраняя при этом возможность ссылаться на ключ.

Чтобы поместить вещи по-другому, после того, как я сопоставил 2 значения, я хочу иметь возможность создать новый словарь, соответствующий ключу к ключу b:

match_dictionary[*key from a*] = (*key from b*)
a.pop(*key from a*)
b.pop(*key from b*)

Здесь код:

import collections
a = {'ada123456' : ('123','adam','jones') , 'jus567890':('567','justin','brady') , 'mul345678':('345','muller','thomas')}
b = {'ADAMJ' : ('123','jones') , 'JBRADY':('justin','brady') , 'THOMASM':('345','muller','thomas')}

if [i for i in [(x[1],x[2]) for x in [a[c] for c in a.keys()]]] in [b[d] for d in b.keys()]:
    print('Why won\'t this work?')

if ('justin','brady') in [b[d] for d in b.keys()]:
    print('\nthis works though')

if ('justin','brady') in [(x[1],x[2]) for x in [a[c] for c in a.keys()]]:
    print('\nthis too')
Теги:
python-3.x
dictionary
correlation

1 ответ

0
Лучший ответ

Я сделал это ключом к списку, если у вас более одного совпадения

new_dict = defaultdict(list)
for b_name, b_values in b.items():
    for a_name, a_values in a.items():
        intersect = set(a_values).intersection(set(b_values))
        if len(intersect) >= 2:
            new_dict[a_name].append(b_name)

Но было бы легко изменить его на

            new_dict[a_name] = b_name

если хотите. Тогда вам не нужен дефолт по умолчанию.

Это дает:

defaultdict(list,
            {'ada123456': ['ADAMJ'],
             'jus567890': ['JBRADY'],
             'mul345678': ['THOMASM']})

если вы хотите, чтобы нормальный dict обратно просто обернул его в dict()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню