У мене є словник нижче:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Як індексувати перший запис у словнику?
colors[0]
поверне a KeyError
зі зрозумілих причин.
У мене є словник нижче:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Як індексувати перший запис у словнику?
colors[0]
поверне a 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
(але ви все одно можете - це в основному той самий тип). Реалізація CPython Python 3.6 вже включала цю зміну, але оскільки вона не є частиною специфікації мови, ви не можете на неї покладатися в Python 3.6.
d.iterkeys().next()
замість того, d.keys()[0]
щоб перевіряти один із ключів, не виймаючи його. Якщо словник величезний, це матиме велике значення з точки зору продуктивності. Те саме стосується цінностей та предметів. У Python 2.7 ви також можете використовувати об'єкти перегляду dict
Якщо хтось все ще дивиться на це питання, прийнята в даний час відповідь застаріла:
Оскільки 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"}
Або будь-яка така комбінація.
Тож правило великого пальця - СЛОВНИК - це не впорядковано !
насправді я знайшов нове рішення, яке мені справді допомогло. Якщо вас особливо турбує індекс певного значення у списку або наборі даних, ви можете просто встановити значення словника на цей індекс !:
Просто дивись:
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] поверне "blue"
Щось таке.
І тоді, поки ви все робите, ви можете скласти дикт із числовими значеннями як ключами, щоб ви завжди могли використовувати їх для пошуку ваших кольорів, знаєте, якщо вам це потрібно.
значення = {5: [1, 'синій'], 6: [2, 'червоний'], 8: [3, 'жовтий']}
Потім, (кольори [кольори_клавіші [значення [5] [1]]] [0]) поверне "синій".
Або ви можете скористатися списком списків.
Удачі!
Ви не можете, оскільки dict
це не впорядковано. Ви можете використовувати його .popitem()
для отримання довільного предмета, але це вилучить його з дикту.