列表理解得到错误的输出

问题描述 投票:0回答:1
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

我得到这个错误的原因是什么。

python list list-comprehension
1个回答
3
投票

改成这样。

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
投票

试试下面的方法

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

通过访问 data['name'],你正试图访问一个财产 name 的子数组上,而不是分配给 i 在你的理解力。

© www.soinside.com 2019 - 2024. All rights reserved.