У меня есть переменная со списками
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], но получаю ошибку индекса.






Я думаю, что вы неправильно определили свой список списков и поэтому получаете ошибку. Кроме того, вам не хватало открывающих скобок 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 Я думаю, что OP упомянул: «Я могу получить доступ только к первому элементу каждого списка, например, с». Я думаю, он имел в виду первое изречение.
В вашем коде у вас есть 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]
В этом случае символ продолжения строки \ также не нужен.
Ваш образец данных, похоже, не соответствует вашему примеру вывода для
list1[0]. Я думаю, вам не хватает запятых и скобок в вашем образце.