Вывод списка неверных выводов - PullRequest
0 голосов
/ 04 мая 2020
data = [

[
    {'name': 'gan', 'age': 21}, {'name': 'esh', 'age': 22}
],

[
    {'name': 'rahul', 'age': 23}, {'name': 'rohan', 'age': 24}
]

]
u_names = [data['name'] for i in data for j in i if data['age'] > 21]
print(u_names)


line 38, in <module>
    if data['age'] > 21:
TypeError: list indices must be integers or slices, not str

Я получаю эту ошибку, в чем причина.

Ответы [ 2 ]

3 голосов
/ 04 мая 2020

Замените на это:

u_names = [j['name'] for i in data for j in i if j['age'] > 21]

data - это вложенный список. j - это фактический повторяющийся объект dict внутри.

Если вы переименуете объекты в более описательные, вы увидите структуру:

u_names = [
    inner_dict['name']
        for inner_list in data
            for inner_dict in inner_list
                if inner_dict['age'] > 21
    ]

Что переводится как

for inner_list in data:
    for inner_dict in inner_list:
        if inner_dict['age'] > 21:
            return inner_dict['name']
1 голос
/ 04 мая 2020

Попробуйте следующее:

u_names = [j['name'] 
for i in data:
    for j in i:
         if j['age'] > 21:
             print(u_names)

Обращаясь к data['name'], вы пытаетесь получить доступ к свойству name в исходном массиве данных, а не к подмассиву, назначенному i в ваше понимание.

...