2013-10-04 3 views
2
def make_scores_dict(names, scores): 
    for i in range(len(names)): 
     scores_dict[names[i]] = scores[i] 

    return scores_dict 



names=['Joe', 'Tom', 'Bob', 'Emily', 'Sue'] 
scores=[10, 23, 13, 18, 12] 

dict = make_scores_dict(names, scores) 

print #How do I print out a specific name? This is where I'm stuck at 

По существу мне нужно взять 2 списка и сделать словарь с ключами/значениями. Я зациклился на том, как распечатать указанное имя. Например, если я хочу распечатать Эмили и ее ценность, как мне это сделать?Словарь с python

ответ

3

Вы можете просто сделать

def make_scores_dict(names, scores): 
    return dict(zip(names, scores)) 

Чтобы исправить то, что вы пытаетесь сделать:

def make_scores_dict(names, scores): 
    scores_dict = {} 
    for i in range(len(names)): 
     scores_dict[names[i]] = scores[i] 

    return scores_dict 

ИЛИ

def make_scores_dict(names, scores): 
    scores_dict = {} 
    for i, name in enumerate(names): 
     scores_dict.update({name: scores[i]}) 
    return scores_dict 
+1

И как другой вариант, 'для имени, счет в почтовом индексе (имена, баллы): scores_dict [имя] = score' – icktoofay

+0

Я забыл упомянуть, что я использую 2.7. Работает ли zip в 2.7? – juice

+0

Да, да. .. – karthikr

2

После того, как вы сделали dict отображение имен баллам , вы можете использовать []:

>>> print scores['Emily'] 
18 

Обратите внимание, что я переименовал dict в scores - dict это имя типа словаря, и это лучше, чтобы не перезаписать его. После того, как вы изменили, что есть намного более краткий способ для создания словаря:

>>> scores = dict(zip(names, scores)) 

zip сочетает в себе любое количество итерируемыми попарно, например:

>>> zip([1, 2, 3], [4, 5, 6]) 
[(1, 4), (2, 5), (3, 6)] 

Это просто случается, что dict может занять список кортежей в этом формате для создания словаря:

>>> dict([('one', 1), ('two', 2)]) 
{'one': 1, 'two': 2} 
Смежные вопросы