2016-11-25 2 views
0

enter image description hereПеребор словаря в Python

Прилагается копия вопрос я пытаюсь ответить. (Это не домашнее задание, просто из книги программирования).

Итак, в первом случае я создал словарь.

fridge ={ "steak" : "it is so yum!" , \ 
    "Pizza" : "it is even yummier!" , \ 
    "eggs": "always handy in a pinch" , \ 
    "ice cream": "a tasty treat for when I work hard" , \ 
    "butter" : "always useful for spreading on toast" \ 
    } 

Должен признать, может быть, это было то, как текст был сформулирован, по приговору:

"Затем создать имя, которое ссылается на строку, содержащую имя пищи, вызов имя food_sought

сильно смущало меня

Я думал, что это означало:.

создать аи ariable, называемый food_sought, сделать его равным любому из ключей в словаре холодильников .... затем используйте цикл for, чтобы узнать, есть ли совпадение в словаре.

так ....

food_sought = "steak" 
for food_sought in fridge: 
    if food_sought !=steak: 
     print ("there has not been a match!") 

Всякий раз, когда я запускаю код, однако, я сказал:

Traceback (самый последний вызов последнего): Файл " ", строка 2, в , если food_sought == стейк: NameError: name 'steak' не определен

+2

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

+2

'if food_sought! = Steak:' не означает 'if food_sought! =" Steak ":' ваша ошибка говорит для предыдущего, у вас есть переменная 'steak', которая не определена. – MooingRawr

ответ

2

steak в этом случае будет переменной.

Что это выглядит, как вы просите за это:

food_sought != 'steak'

но то, что вы, вероятно, хотите,

key != food_sought

Ниже

Если вы хотите получить значение вы можете использовать items() в python3 или iteritems() в python 2

food_sought = 'steak' 
for key, value in fridge.items(): 
    if key != food_sought: 
     print("Not the key we're looking for...") 
    print(key) # the key, ie "steak' 
    print(value) # the value, ie "it is so yum!" -- I agree 

Говядина, это то, что на ужин.

+0

Вот почему меня несколько удивляет вопрос, потому что я использовал fridge.keys/fridge.values, чтобы получить необходимую информацию, – apronedsamurai

1

Вот как вы можете ITER над словарем, используя для цикла, как вы хотите, надеюсь, это поможет вам лучше понять :)

fridge ={ "steak" : "it is so yum!" , \ 
    "Pizza" : "it is even yummier!" , \ 
    "eggs": "always handy in a pinch" , \ 
    "ice cream": "a tasty treat for when I work hard" , \ 
    "butter" : "always useful for spreading on toast" \ 
    } 

food_sought = "steak" 

for key, value in fridge.items(): 
    if(key == food_sought): 
    print(key, 'corresponds to', value) 
    else: 
    print ("There has not been a match!") 

Выход: (примечание словари не упорядочены)

There has not been a match! 
There has not been a match! 
There has not been a match! 
There has not been a match! 
steak corresponds to it is so yum! 

Попробуйте here

0

проблема заключается в том, что стейк является переменной, которую вы haven't определены. Когда вы пишете food_sought!=steak, вы сравниваете значение двух переменных, но переменная steak не определена.

Ваша первая строка кода ошибочно назначает food_sought="steak", она должна назначать steak='steak'. Таким образом, ваш код будет работать:

steak = "steak" 
for food_sought in fridge: 
    if food_sought != steak: 
     print ("there has not been a match!") 

Сказав это, как вы написали код, это не самый лучший/самый хороший способ сделать, хотя это работает. Нет необходимости определять переменную steak, вы можете сравнить переменную food_sought непосредственно со строкой 'steak'. Код будет выглядеть так:

for food_sought in fridge: 
    if food_sought != 'steak': 
     print ("there has not been a match!") 
Смежные вопросы