Подтвердить что ты не робот

Как индексировать словарь?

У меня есть словарь ниже:

colors = {
    "blue" : "5",
    "red" : "6",
    "yellow" : "8",
}

Как индексировать первую запись в словаре?

colors[0] по очевидным причинам вернет KeyError.

4b9b3361

Ответ 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.