2013-04-03 5 views
0

У меня есть два словарей, созданных из конфигурационного файла:словаря Reconstruct в питоне

dict1 = {'x':'A', 'y':'B', 'z':'C'} # decoding ABCs 
    dict2 = {'ID1': ('x','n1'), 'ID2': ('y','n2'), 'ID3':('z', 'n3') } 

Я хочу, чтобы создать новый словарь в следующем формате:

final = {'A':{'ID1':'n1', 'ID2':'n2'}, 'C':{'ID3':'n3'}, ...} 

Я не придумать умный способ сделать это. У кого-нибудь есть идеи?

+1

Должно ли это второе '' A'' быть '' B''? – Blender

+1

Вы не можете. Вы не можете создать словарь с дублирующими ключами. Я вижу, как '' x'' сопоставляется с '' A'' через 'dict1', но вам нужно решить, как разрешить конфликты. –

+0

@jamylak: Я откатил ваше редактирование. Вы не можете просто предположить, что что-то опечатка и изменить смысл вопроса, подобного этому. – interjay

ответ

2

Рассмотрим:

final = {} 
for id, (x, n) in dict2.items(): 
    final.setdefault(dict1[x], {})[id] = n 

, который создает

{'A': {'ID2': 'n2', 'ID1': 'n1'}, 'C': {'ID3': 'n3'}} 

Не знаю, если это отвечает вашим потребностям, но, по крайней мере, это действительная структура.

+0

Это именно то, чего я хотел. Спасибо. – Bjoern

2

Полагая х, у, г в dict2 и A, B, C в финале:

final = {dict1[k]: {id: v} for id, (k, v) in dict2.items()} 

In [6]: dict1 = {'x':'A', 'y':'B', 'z':'C'} 

In [7]: dict2 = {'ID1': ('x','n1'), 'ID2': ('y','n2'), 'ID3':('z', 'n3') } 

In [8]: {dict1[k]: {id: v} for id, (k, v) in dict2.items()} 
Out[8]: {'A': {'ID1': 'n1'}, 'B': {'ID2': 'n2'}, 'C': {'ID3': 'n3'}} 

Если вы действительно означает, что должно быть два, как, то не может быть выражен как dict. Будет ли список пар? Тогда вам придется принять решение о заказе.

In [10]: [(dict1[k], {id: v}) for id, (k, v) in dict2.items()] 
Out[10]: [('A', {'ID2': 'n2'}), ('C', {'ID3': 'n3'}), ('A', {'ID1': 'n1'})] 
+0

, что приводит к замене другого ключа * * * 'A''. Будет произвольно, какой победит. –

+0

@MartijnPieters: Возможно, это ошибка копирования/вставки в исходном вопросе. – Blender

+1

Я предполагал, что второй А, а второй х - опечатки - это просто не имеет никакого смысла. –

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