Как индексировать словарь?
У меня есть словарь ниже:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Как индексировать первую запись в словаре?
colors[0]
по очевидным причинам вернет KeyError
.
Ответы
Ответ 1
В Python словари неупорядочены. Если вы не заботитесь о порядке записей и хотите получить доступ к ключам или значениям по индексу в любом случае, вы можете использовать d.keys()[i]
и d.values()[i]
или d.items()[i]
. (Обратите внимание, что эти методы создают список всех ключей, значений или элементов соответственно. Поэтому, если вам нужно их больше одного раза, сохраните список в переменной, чтобы повысить производительность.)
Если вы заботитесь о порядке записей, начиная с Python 2.7, вы можете использовать collections.OrderedDict
. Или используйте список пар
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
если вам не нужен доступ по ключу. (Почему ваши номера строк кстати?)
Ответ 2
Если кто-то еще смотрит на этот вопрос, принятый в настоящее время ответ устарел:
Так как Python 3.6, словари сохраняют порядок, то есть теперь они ведут себя точно как collections.OrderedDict
. К сожалению, до сих пор нет специального метода для индексации в keys()
/values()
словаря, поэтому получение первого ключа/значения в словаре может быть выполнено как
first_key = list(colors.keys())[0]
first_val = list(colors.values())[0]
или, альтернативно (это позволяет создать экземпляр представления ключей в список):
def get_first_key(dictionary):
for key in dictionary.keys():
return key
first_key = get_first_key(colors)
first_val = colors[first_key]
Если вам нужна клавиша n
-th, то аналогично
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
Ответ 3
Если вам нужен упорядоченный словарь, вы можете использовать odict.
Ответ 4
Вы не можете, так как dict
неупорядочен. вы можете использовать .popitem()
для получения произвольного элемента, но это удалит его из dict.
Ответ 5
На самом деле я нашел новое решение, которое действительно помогло мне: если вы особенно обеспокоены индексом определенного значения в списке или наборе данных, вы можете просто установить значение словаря в этот индекс!:
Просто смотрите:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':1, 'b':2, 'c':3}
Теперь через силу hashmaps вы можете потянуть индекс за свои записи в постоянное время (также намного быстрее)
Ответ 6
Адресация элемента словаря - это как сидеть на ослике и наслаждаться поездкой.
Как правило, для Python DICTIONARY является бездельным
Если есть
dic = {1: "a", 2: "aa", 3: "aaa"}
Теперь предположим, что если я буду выглядеть как dic[10] = "b"
, то он не будет так напоминать
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
Это может быть как
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
или
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
или
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
Или любая такая комбинация.
Правило большого пальца: СЛОВАРЬ без ограничений!
Ответ 7
Словари не являются списками.
со списками, которые вы можете просто сделать
enter foo[0] here
, чтобы получить это значение.
dicts получили функции .value и .keys().
Кроме того, он более полезен для использования try/except в любое время, когда вы выполняете итерацию через dict.