У меня есть словарь ниже:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Как мне проиндексировать первую запись в словаре?
colors[0]
вернет KeyError
по понятным причинам.
У меня есть словарь ниже:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Как мне проиндексировать первую запись в словаре?
colors[0]
вернет KeyError
по понятным причинам.
Ответы:
Словари неупорядочены в версиях Python до Python 3.6 включительно. Если вам не важен порядок записей и вы все равно хотите получить доступ к ключам или значениям по индексу, вы можете использовать d.keys()[i]
и d.values()[i]
или d.items()[i]
. (Обратите внимание, что эти методы создают список всех ключей, значений или элементов в Python 2.x. Поэтому, если они вам нужны более одного раза, сохраните список в переменной для повышения производительности.)
Если вам важен порядок записей, начиная с Python 2.7 вы можете использовать collections.OrderedDict
. Или используйте список пар
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
если вам не нужен доступ по ключу. (Кстати, почему ваши числа - это строки?)
В Python 3.7 обычные словари упорядочены, поэтому вам больше не нужно их использовать OrderedDict
(но вы все равно можете - это в основном тот же тип). Реализация Python 3.6 в CPython уже включала это изменение, но поскольку оно не является частью спецификации языка, вы не можете полагаться на него в Python 3.6.
d.iterkeys().next()
вместо, d.keys()[0]
чтобы проверить один из ключей, не удаляя его. Если словарь большой, это будет иметь большое значение с точки зрения производительности. То же самое касается ценностей и предметов. В Python 2.7 вы также можете использовать объекты dict view
Если кто-то все еще смотрит на этот вопрос, принятый в настоящее время ответ уже устарел:
Начиная с Python 3.7 * словари сохраняют порядок , то есть теперь они ведут себя точно так же, как collections.OrderedDict
раньше. К сожалению, до сих пор нет специального метода для индексации в keys()
/ values()
из словаря, поэтому получить первый ключ / значение в словаре можно как
first_key = list(colors)[0]
first_val = list(colors.values())[0]
или альтернативно (это позволяет избежать создания экземпляра представления ключей в списке):
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
Если вам нужен n
-й ключ, то аналогично
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")
(* CPython 3.6 уже включал упорядоченные словари, но это была лишь деталь реализации. Спецификация языка включает упорядоченные словари, начиная с версии 3.7.)
Обращаться к элементу словаря - это все равно что сидеть на осле и наслаждаться поездкой.
Как правило, СЛОВАРЬ Python не имеет порядка
Если там есть
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"}
Или любое такое сочетание.
Так что правило большого пальца - СЛОВАРЬ - беспорядочно !
Если вам нужен упорядоченный словарь, вы можете использовать odict .
на самом деле я нашел новое решение, которое действительно помогло мне. Если вас особенно беспокоит индекс определенного значения в списке или наборе данных, вы можете просто установить значение словаря для этого индекса !:
Просто смотреть:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
Теперь с помощью хэш-карт вы можете индексировать свои записи за постоянное время (то есть намного быстрее)
о, это сложно. То, что у вас здесь, в основном, - это два значения для каждого элемента. Затем вы пытаетесь позвонить им по номеру в качестве ключа. К сожалению, одно из ваших значений уже установлено в качестве ключа!
Попробуй это:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
Теперь вы можете вызывать ключи по номерам, как если бы они индексировались как список. Вы также можете указать цвет и номер по их положению в списке.
Например,
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
Конечно, вам придется придумать другой способ отслеживания того, в каком месте находится каждый цвет. Возможно, у вас есть другой словарь, в котором ключ каждого цвета хранится в качестве его значения.
colors_key = {'синий': 1, 'красный': 6, 'yllow': 8}
Затем вы также сможете найти ключ цветов, если вам нужно.
colors [colors_key ['blue']] [0] вернет 'синий'
Что-то такое.
А затем, пока вы это делаете, вы можете создать диктант с числовыми значениями в качестве ключей, чтобы вы всегда могли использовать их для поиска своих цветов, знаете ли, если вам нужно.
values = {5: [1, 'синий'], 6: [2, 'красный'], 8: [3, 'желтый']}
Тогда (colors [colors_key [values [5] [1]]] [0]) вернет «синий».
Или вы можете использовать список списков.
Удачи!
Вы не можете, так как dict
это неупорядочено. вы можете использовать .popitem()
для получения произвольного элемента, но это удалит его из dict.