У меня есть словарь ниже:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Как индексировать первую запись в словаре?
colors[0]
по очевидным причинам вернет KeyError
.
У меня есть словарь ниже:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Как индексировать первую запись в словаре?
colors[0]
по очевидным причинам вернет KeyError
.
В Python словари неупорядочены. Если вы не заботитесь о порядке записей и хотите получить доступ к ключам или значениям по индексу в любом случае, вы можете использовать d.keys()[i]
и d.values()[i]
или d.items()[i]
. (Обратите внимание, что эти методы создают список всех ключей, значений или элементов соответственно. Поэтому, если вам нужно их больше одного раза, сохраните список в переменной, чтобы повысить производительность.)
Если вы заботитесь о порядке записей, начиная с Python 2.7, вы можете использовать collections.OrderedDict
. Или используйте список пар
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
если вам не нужен доступ по ключу. (Почему ваши номера строк кстати?)
Если кто-то еще смотрит на этот вопрос, принятый в настоящее время ответ устарел:
Так как 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")
Если вам нужен упорядоченный словарь, вы можете использовать odict.
Вы не можете, так как dict
неупорядочен. вы можете использовать .popitem()
для получения произвольного элемента, но это удалит его из dict.
На самом деле я нашел новое решение, которое действительно помогло мне: если вы особенно обеспокоены индексом определенного значения в списке или наборе данных, вы можете просто установить значение словаря в этот индекс!:
Просто смотрите:
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 вы можете потянуть индекс за свои записи в постоянное время (также намного быстрее)
Адресация элемента словаря - это как сидеть на ослике и наслаждаться поездкой.
Как правило, для 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"}
Или любая такая комбинация.
Правило большого пальца: СЛОВАРЬ без ограничений!
Словари не являются списками.
со списками, которые вы можете просто сделать
enter foo[0] here
, чтобы получить это значение.
dicts получили функции .value и .keys().
Кроме того, он более полезен для использования try/except в любое время, когда вы выполняете итерацию через dict.