2015-12-23 3 views
0

я использовал словари здесь:получает значение ключа в питона

percentage = {'a':75.5, 'b':73, 'c':78, 'd':68, 'e':68} 
name = input("enter a name: ") 
if percentage.has_key(name): 
print dict[name] 
else: 
print "no data" 

, когда я уже дал имя (например, «а»), она показывает «необработанное NameError -name ' a 'не определено ".whats решение для него. спасибо.

+0

Вы действительно используете 'dict [name]' вместо 'percent [name]'? – TigerhawkT3

+0

Какую версию Python вы используете? Посмотрите этот ответ: http://stackoverflow.com/a/21122817/4897175. – antonioduarte

+0

Предполагая, что вы запрашиваете ключ из правильного словаря, вы хотите использовать 'get'. 'df.get (key)' вернет значение из словаря, если оно присутствует, иначе оно вернет None. Вы также можете указать возвращаемое значение, если ключ не найден, например. 'df.get (ключ, 'NA')'. – Alexander

ответ

2

Попробуйте изменить, чтобы указать имя вашего словаря:

percentage = {'a':75.5, 'b':73, 'c':78, 'd':68, 'e':68} 
name = input("enter a name: ") 
if percentage.has_key(name): 
    print percentage[name] 
else: 
    print "no data" 
1

Во-первых, вы должны обратиться к словарю своим настоящим именем, percentage, не dict. dict - это тип и функция, а не объект, который вы создали.

Во-вторых, есть более простой способ сделать это, с get способом:

percentage = {'a':75.5, 'b':73, 'c':78, 'd':68, 'e':68} 
name = input("enter a name: ") 
print percentage.get(name, 'no data') 

Это будет пытаться получить значение для name, а если нет такой ключ будет вместо этого возвращать строку 'no data' ,

+0

Вы можете даже сделать 'percent.get (raw_input (" введите имя: "), 'no data'))', если вы хотите: D – TerryA

+0

True; не нужно сохранять его, если он не используется повторно. – TigerhawkT3

+0

спасибо. и можем ли мы использовать списки или театры для той же цели. Кто лучший. – lucky

0

Вы используете Python 2.7 или Python 3?

Если вы используете 2.7, то вам необходимо использовать raw_input(), поскольку input() эквивалентно eval(raw_input()), что вы, вероятно, не хотят:

name = raw_input("enter a name: ") 

Если вы используете 3, то print потребности чтобы быть функцией:

print(dict[name]) 
... 
print("no data") 

Однако, общая для обеих версий, некоторые исправления должны применяться.

Прежде всего, вам не нужно использовать has_key(). Я уверен, что в настоящее время это несуществующей, так что самый вещий способ обойти это сделать:

if name in percentage: 

Easy право? Затем вам нужно распечатать значение, и для этого синтаксис: dictionary[key] = value. У вас, похоже, есть это, но вы забыли ссылаться на свой собственный словарь и вместо этого использовали встроенный тип dict. Оно должно быть:

print percentage[name] 

Таким образом, все вместе (Python 2.7):

percentage = {'a':75.5, 'b':73, 'c':78, 'd':68, 'e':68} 
name = raw_input("enter a name: ") 
if percentage.has_key(name): 
    print percentage[name] 
else: 
    print "no data" 
+0

Если бы OP использовал Python 3, то был бы 'SyntaxError', прежде чем он смог бы создать' NameError'. – TigerhawkT3

+0

@ TigerhawkT3 А, не знал об этом. Я сам не использую Python 3 – TerryA

+0

Да. В более ранних версиях Python 3 он дает общую трассировку, но в конечном итоге она была изменена, чтобы сказать «SyntaxError: Отсутствие скобок в вызове« print ». – TigerhawkT3

0

Не используйте вход в python2.7, так как он вернется с функцией вместо строки. Вместо этого используйте raw_input.

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