2016-03-26 5 views
1

То, что я пытаюсь сделать, это сохранить значение x, y с помощью ключа. Например, в моем случае мне это нужно, так что, как только любое x, y достигло значения 3, произойдет какой-то процесс.(Словарь), хранящий ключи с x, y в Python

Вот что я пробовал: Однако это дает мне ошибку, поскольку я не могу хранить списки в словарях.

dictionary= {} 
player = [0,0] 

def Checking(): 
    if player in dictionary: 
     dictionary[[player]] +=1 
     print("repopulate", dictionary) 
    else: 
     dictionary[player] = 0 
     print(dictionary) 
    if dictionary.get(player) >= 3: 
     print("It is done!") 

EDIT: К сожалению об отсутствии ясности в вопросе. Переменная игрока - это пользовательский ввод, где пользователь хочет перемещаться внутри заданного x, y. Есть несколько сокровищ, и если пользователь должен выбрать позицию x, y, которая совпадает с сокровищем x, y; то к этому сокровищу следует добавить +1. Когда сокровище достигает 3, оно должно быть уменьшено.

+0

Я не совсем понимаю вопрос. Зачем вам нужен ключ? Когда изменится значение ключа? –

+0

Вы можете вызвать str() на проигрывателе, чтобы превратить его в строку и использовать строку в качестве ключа. – NendoTaka

+0

Привет, так что в основном ключ будет меняться один раз каждый раз, когда пользователь вводит значение своих координат x, y. – Test1234

ответ

0

Я думаю, что вы хотите использовать плеер в качестве ключа, а счетчик в качестве значения этого ключа:

>>> treasure_hits = {} 
>>> player = (0,0) 
>>> try: 
... treasure_hits[player] += 1 
... except KeyError: 
... treasure_hits[player] = 0 
... 
>>> treasure_hits 
{(0, 0): 0} 
>>> 
>>> try: 
... treasure_hits[player] += 1 
... except KeyError: 
... treasure_hits[player] = 0 
... 
>>> treasure_hits 
{(0, 0): 1} 
>>> 

Создание treasure_hits кортеж вместо списка позволяет его использовать в качестве ключа, так как он является неизменным

+0

Извините за отсутствие ясности в вопросе. Переменная игрока - это пользовательский ввод, где пользователь хочет перемещаться внутри заданного x, y. Есть несколько сокровищ, и если пользователь должен выбрать позицию x, y, которая совпадает с сокровищем x, y; то к этому сокровищу следует добавить +1. Когда сокровище достигает 3, оно должно быть уменьшено. – Test1234

+0

Единственное, что по-разному касается вашего кода и моего, заключается в том, что вы используете список в качестве ключа, и вы не можете этого сделать. Но если вы делаете кортеж (игрок), вы можете использовать его в качестве ключа –

+0

Спасибо, joel, tupil или string работают! – Test1234

0

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

treasureHits = {} 
player = [0,0] 
def myFunction(): 
    treasureHits["key"]=[p+1 for p in player] 
    print treasureHits["key"] 
myFunction() 

Вот что я понимаю из вашего вопроса.

0

Так что самый простой способ сделать это - позвонить str() по переменной игрока. Это превратит список в строку. Вам нужно сделать это, потому что словари не могут использовать списки в качестве ключей. Поэтому попробуйте следующее: treasureHits[str(player)]

Примечание: это обычно не рекомендуется, потому что у вас будут очень необычные ключи, и если кто-то еще будет редактировать ваш код, это может сбить с толку. Не забудьте оставить много комментариев в коде!