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
在你的理解力。