2012-11-05 2 views
3

У меня есть эти списки:список Convert ключей и список значений словаря

list1 = ["a","b","c"] 
list2 = ["1","2","3"] 

Мне нужно, чтобы добавить их в словарь, где песни1 является ключевым и песни2 является значением.

Я написал этот код:

d = {} 
for i in list1: 
    for j in list2: 
     d[i] = j 
print d 

Выход заключается в следующем:

{'a':'3','b':'3','c':'3'} 

Что случилось с этим кодом? Как я могу записать его так, чтобы выход был

{'a':'1','b':'2','c':'3'} 

Спасибо!

+0

Проблема заключается в том, что 'j' не зависит от' i' - вложенные циклы эффективно кросс-применяться там, где хранится только * последний * значение. Сравните с 'for x in range (len (list1)): i = list1 [x]; j = list2 [x]; '- * now * установлена ​​зависимость. Однако, см. Ответы с хорошим подходом к установлению зависимости. –

+0

@ user1692740: вы должны принять ответ, который вам полезен, это поможет вам получить больше ответов в будущем ... – avasal

ответ

4

вы почти там, кроме вас, нужно перебирать списки одновременно

In [1]: list1 = ["a","b","c"] 

In [2]: list2 = ["1","2","3"] 

In [3]: d = {} 

In [4]: for i, j in zip(list1, list2): 
    ...:  d[i] = j 
    ...: 

In [5]: print d 
{'a': '1', 'c': '3', 'b': '2'} 
+0

Спасибо! Это именно то, что мне нужно. Только, я не очень разбираюсь в Python. Что делает «zip»? – Aei

+0

zip (list1, list2) предоставит вам список кортежей типа '[('a', '1'), ('b', '2'), ('c', '3')]' для работы с более подробной информацией вы можете ознакомиться по адресу http://docs.python.org/2/library/functions.html#zip – avasal

12

Zip списки и использовать Dict понимание:

{i: j for i, j in zip(a, b)} 

Или, еще проще, просто использовать dict():

Вы должны оставить его простым, поэтому последнее решение является лучшим, но я сохранил его e dict, чтобы показать, как это можно сделать.

+0

Обратите внимание на то, что определения dict составляют только 2.7 и выше. – verbsintransit

0

Вы также можете использовать dict comprehension, чтобы сделать следующее в приятной однострочной линии.

d = {i : j for i, j in zip(list1, list2)} 
0
list1 = ["a","b","c"]             
list2 = ["1","2","3"]                               
mydict = {}                
for i,j in zip(list1,list2):           
    mydict[i] = j              
print mydict 
Смежные вопросы