Мало хто з'являється, незважаючи на безліч відповідей на це запитання, зазначив, що словники - це не упорядковані відображення, і так (до благословення порядку вставки з Python 3.7) ідея "першого" запису в словнику буквально склалася немає сенсу. І навіть до OrderedDict
дозволу можна отримати лише числовий індекс, використовуючи такі поглинання, як mydict[mydict.keys()[0]]
(тільки Python 2, оскільки в Python 3keys()
є ітератором, який не можна підписати.)
З 3.7 і далі і на практиці в 3,6 - нова поведінка була введена тоді, але не була включена як частина мовної специфікації до 3.7 - ітерація ключів, значень чи предметів диктату (і, я вважаю, a встановити також) спочатку дасть найменш нещодавно вставлені об'єкти. Досі не існує простого способу отримати доступ до них за допомогою числового індексу вставки.
Щодо питання вибору та "форматування" елементів, якщо ви знаєте ключ, який ви хочете отримати у словнику, ви зазвичай використовуєте ключ як підпис для його отримання ( my_var = mydict['Apple']
).
Якщо ви дійсно хочете мати можливість індексувати елементи за номером запису (ігноруючи той факт, що номер конкретного запису змінюватиметься після вставки), відповідна структура, ймовірно, буде списком двоєлементних кортежів. Замість
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
ви можете використовувати:
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
За цього режиму перший запис складається mylist[0]
у класичній формі, доданій до списку, і його значення ('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})
. Ви можете повторити весь список таким чином:
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
але якщо ви знаєте, що шукаєте ключ "Apple", чому б ви просто не використали дикт замість цього?
Ви можете ввести додатковий рівень непрямості, кешуючи список клавіш, але складність збереження двох структур даних в синхронізації неминуче додасть складності вашого коду.