列出输出错误的理解


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

我犯了这个错误,原因是什么。

更改为:

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']

尝试以下操作:

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

通过访问data['name'],您试图访问原始数据数组上的属性name,而不是您理解的分配给i的子数组。

最新更新