объект не может быть подписан со словарем, пытающимся распечатать словарь, преобразованный с помощью .items

#python

#питон

Вопрос:

В настоящее время пытаетесь напечатать первую запись alphabet_numbers.items (a, 1)?

 alphabet_numbers = {'a': '1',   'b': '2',  'c': '3',   'd' : '4',  'e': '5' }  tuple1 = alphabet_numbers.items()   print(tuple1[0,0])  

как можно напечатать только первую запись tuple1?

Если положить print(tuple1) , я получу:

 dict_items([('a', '1'), ('b', '2'), ('c', '3'), ('d', '4'), ('e', '5')])  

Комментарии:

1. tuple1 вероятно, это не лучшее название для этой переменной. Но в любом случае, вы могли бы сделать либо list(tuple1)[0] или next(iter(tuple1)) . Первый, вероятно, легче понять, но второй использует меньше памяти, если вы начали с большого словаря.

2. Составьте список: tuple1 = list(alphabet_numbers.items()) ?

3. Я полагаю, очевидный вопрос таков: если вы хотите получить доступ к этим данным по числовому индексу, как к упорядоченной коллекции, почему бы вам не создать упорядоченную коллекцию, подобную списку? Хотя словари теперь сохраняют порядок ключей, они не предназначены для упорядоченного доступа. Вот почему вам нужно перепрыгнуть через эти обручи, чтобы сделать это.

Ответ №1:

Его можно явно преобразовать в список:

 alphabet_numbers = {'a': '1',  'b': '2',  'c': '3',  'd': '4',  'e': '5' }  tuple1 = list(alphabet_numbers.items()) print(tuple1[0][0])  print(list(alphabet_numbers.keys())[0])  

Или используйте функцию keys , если вас интересует только первый ключ.

Функция items возвращает не список, а представление, подобное объекту. Проверка типов mypy показывает тип с помощью reveal_type(tuple1) оригинального примера:

 typing.ItemsView[builtins.str*, builtins.str*]  

Ответ №2:

 first_entry = list(alphabet_numbers.items())[0]  

Вы можете распечатать первую запись, и она выведет кортеж.