2016-05-03 2 views
-3

У меня есть следующие словари:Как смешивать два словаря в Python?

dict1={'fx245': 2, 'gt345': 12, 'vf251': 1, 'js921': 3} 
dict2={'fx245': 'Alex', 'gt345': 'Peter', 'vf251': 'Louis', 'js921': 'Alice'} 

Вопрос заключается в том, как соединить оба словаря ?. Например, как:

Кодекса fx245, то есть Алекс, имеет номер 2.

Справка и благодаря

+3

Определите ссылку. Вы хотите получить один словарь, где значение является кортежем, так что 'dict3 [fx245]' возвращает '(2, 'Alex')'? –

+1

Это домашнее задание, кстати? Вы, кажется, не понимаете свою собственную проблему. – 3442

+0

@StevenRumbalski Я пытаюсь получить список фраз: Код fx245, т.е. Alex, имеет номер 2. Код gt345, то есть Peter, имеет номер 12. Код vf251, то есть Луи, имеет номер 1. Код js921, то есть Alice, имеет номер 3. – Python241820

ответ

2

Учитывая

dict1 = {'fx245': 2, 'gt345': 12, 'vf251': 1, 'js921': 3} 
dict2 = {'fx245': 'Alex', 'gt345': 'Peter', 'vf251': 'Louis', 'js921': 'Alice'} 

Создайте третий Dict, которая отображает код как имя и номер:

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

Здесь в действии:

>>> dict3['fx245'] 
('Alex', 2) 
>>> name, num = dict3['fx245'] 
>>> name 
'Alex' 
>>> num 
2 

Вы упоминаете в комментариях, что вы хотите итерацию над новым словарем и напечатать код, имя и номер. Сделайте это так:

for code, (name, num) in dict3.items(): 
    print(code, name, num) 
+0

Именно этого я и хотел достичь. Извините за непонимание и большое спасибо :) – Python241820

2

Сделать новый Dict, используя Dict понимание:

from collections import namedtuple 

dict1 = {'fx245': 2, 'gt345': 12, 'vf251': 1, 'js921': 3} 
dict2 = {'fx245': 'Alex', 'gt345': 'Peter', 'vf251': 'Louis', 'js921': 'Alice'} 

Person = namedtuple('Person', 'name number') 

all_keys = dict1.viewkeys() & dict2.viewkeys() # just use .keys() on py3 
dictmix = {k: Person(dict2.get(k), dict1.get(k)) for k in all_keys} 

Demo:

>>> dictmix['fx245'] 
Person(name='Alex', number=2) 
>>> dictmix['fx245'].name 
'Alex' 
>>> dictmix['fx245'].number 
2 
+0

Это мое лучшее предположение. Если пользователь уточнит, я обновлю .. – wim

+0

Прекрасно работает, большое спасибо :) – Python241820

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