Python не может получить доступ ко всем элементам списка списков IndexError: индекс списка вне допустимого диапазона

У меня есть переменная со списками

list1 = [{u'key': 1, u'doc_count': 17804}]
[{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}]
[{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}]
[u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]

Я хочу получить доступ ко всем его элементам, например:

{u'key': 1, u'doc_count': 17804}
{u'key': u'01', u'doc_count': 516}
{u'key': u'10', u'doc_count': 368}
{u'key': u'50', u'doc_count': 156}
{u'key': u'02', u'doc_count': 116}
{u'key': u'40', u'doc_count': 1144}
{u'key': u'4P', u'doc_count': 127}
{u'key': 0, u'doc_count': 16342}
{u'key': 1, u'doc_count': 1462}

но я могу получить доступ только к первому элементу каждого списка, например, с помощью

list1[0] = 
{u'key': 1, u'doc_count': 17804}
{u'key': u'01', u'doc_count': 516}
{u'key': u'40', u'doc_count': 1144}
{u'key': 0, u'doc_count': 16342}

Я не могу получить доступ ко второму, третьему и т. д. Элементам этих списков. Я пробовал список [1], но получаю ошибку индекса.

Ваш образец данных, похоже, не соответствует вашему примеру вывода для list1[0]. Я думаю, вам не хватает запятых и скобок в вашем образце.

Niels Henkens 12.01.2019 00:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
62
2

Ответы 2

Я думаю, что вы неправильно определили свой список списков и поэтому получаете ошибку. Кроме того, вам не хватало открывающих скобок dict, что, как я полагаю, является опечаткой.

list1 = [{u'key': 1, u'doc_count': 17804}]
#####################THIS LIST ENDS HERE ^
#all below lines are not considered
[{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}]
[{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}]
[{u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]

#You only have one item in list1 so you will get an error

#lets now make it a proper list of lists
list1 = [ #<see this open brackets?
[{u'key': 1, u'doc_count': 17804}],
[{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}],
[{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}],
[{u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]
] #it ends here

#python 2.7x
for sublist in list1:
    for d in sublist:
        print(d)

#print all of the dicts - python 3.x
#[print(dict) for sublist in list1 for dict in sublist]

Вывод

{'key': 1, 'doc_count': 17804}
{'key': '01', 'doc_count': 516}
{'key': '10', 'doc_count': 368}
{'key': '50', 'doc_count': 156}
{'key': '02', 'doc_count': 116}
{'key': '40', 'doc_count': 1144}
{'key': '4P', 'doc_count': 127}
{'key': 0, 'doc_count': 16342}
{'key': 1, 'doc_count': 1462}

Но list1[0] не даст результата, который OP показал в вопросе. Это также не будет действительным JSON, которым помечен вопрос. Я решил удалить свой ответ, потому что OP на самом деле не дал воспроизводимого примера, поэтому просто кажется бессмысленным исправлять их.

roganjosh 12.01.2019 00:16

@roganjosh Я думаю, что OP упомянул: «Я могу получить доступ только к первому элементу каждого списка, например, с». Я думаю, он имел в виду первое изречение.

Bitto Bennichan 12.01.2019 00:22

В вашем коде у вас есть 4 независимые списки (словарей), первый с именем list1, а остальные без имен.

Список list1 имеет только 1 элемент (словарь), поэтому единственный допустимый индекс для него - 0 - list1[0] действителен, а list[1] - нет, как такой элемент не существует.

Вы, вероятно, хотели объединить все эти списки, поэтому быстрое решение - добавьте первые 3 строки с помощью
+ \:

list1 = [{u'key': 1, u'doc_count': 17804}] + \
    [{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}] + \
    [{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}] + \
    [u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]

(Я также отступил последние 3 строки для удобства чтения), но PEP8 - Руководство по стилю для кода Python предпочитает писать так же, как

list1 = ([{u'key': 1, u'doc_count': 17804}]
    + [{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}]
    + [{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}]
    + [u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}])

(в скобках, чтобы избежать необходимости в символах продолжения строки \, и с оператором с префиксом+.)

Другой вариант - убрать все квадратные скобки, кроме первой и последней и поставьте запятые в конце первых 3 строк:

list1 = [{u'key': 1, u'doc_count': 17804},
    {u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116},
    {u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127},
    u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1]

В этом случае символ продолжения строки \ также не нужен.

Другие вопросы по теме