ключи словаря может быть любой hashable объект (строка, целое число, кортеж и т.д.):
>>> dct = {'a': 1, 1: 'a'}
>>> dct['a']
1
>>> dct[1]
'a'
>>>
Цитирование ключ просто означает, что ключ является строкой, как и с 'a'
выше.
Насколько ваше заявление, что:
Я сходил с определением ключей без процитировать их
Я предполагаю, что вы имеете в виду вы сделали что-то вроде этого:
dct = {key1: 1, key2: 'a'}
Настоящий код не имеет особого значения. Это просто означает, что имена key1
и key2
относятся к объектам хеширования, которые теперь становятся ключами словаря. Пример приведен ниже:
>>> key1 = 'a'
>>> key2 = 1
>>> dct = {key1: 1, key2: 'a'}
>>> dct[key1]
1
>>> dct[key2]
'a'
>>> dct['a']
1
>>> dct[1]
'a'
>>>
С другой стороны, если вы имеете в виду, что вы использовали dict
встроенный сделать словарь:
dct = dict(key1='a', key2=1)
Тогда вы должны знать, что ключи являются еще нормальные строки:
>>> dct = dict(key1='a', key2=1)
>>> dct
{'key2': 1, 'key1': 'a'}
>>> dct[key1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'key1' is not defined
>>> dct['key1']
'a'
>>>
Наконец, в отношении вашего вопроса о том, следует ли вам всегда использовать строковые ключи, ответ зависит от. Если вам нужны ваши ключи для хранения данных, которые могут быть представлены только в виде строки (например, имя человека), используйте строки. Если вам нужны ключи для хранения числовых данных (например, номера идентификаторов), используйте целые числа или поплавки или что угодно.
Проще говоря, сделайте все, что имеет смысл для вашей программы.
Не могли бы вы привести пример того, что вы имеете в виду? –
Вы имеете в виду 'dict (key = 1)' и '{'key': 1}'? – ryanpattison
да, как и выше, кроме '{key: 1}' где 'key' не является уже существующей переменной. «Ушел», потому что в REPL это исключает исключение. – aug2uag