У меня есть словарь ниже:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Как мне проиндексировать первую запись в словаре?
colors[0]
вернет KeyError
по понятным причинам.
python
dictionary
indexing
Harpal
источник
источник
Ответы:
Словари неупорядочены в версиях 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 [colors_key ['blue']] [0] вернет 'синий'
Что-то такое.
А затем, пока вы это делаете, вы можете создать диктант с числовыми значениями в качестве ключей, чтобы вы всегда могли использовать их для поиска своих цветов, знаете ли, если вам нужно.
Тогда (colors [colors_key [values [5] [1]]] [0]) вернет «синий».
Или вы можете использовать список списков.
Удачи!
источник
Вы не можете, так как
dict
это неупорядочено. вы можете использовать.popitem()
для получения произвольного элемента, но это удалит его из dict.источник
next(iter(d.items()))
(.iteritems()
в Python 2) также дает вам произвольный элемент (то же самое в моих тестах, что имеет смысл, поскольку с его помощью можно реализовать popitem), но не удаляет элемент.