Python 单独访问嵌入在字典内列表中的嵌套元素
我想访问公司列表中的数据,这是一个字典,实际上是一个列表。 运行此代码时,我得到“类型错误:列表索引必须是整数或切片”。j循环获取项目中的第一个列表,并用它进行迭代,直到“companys”中的每个元素都被覆盖,但我不明白为什么它不起作用。任何建议都会很有帮助Python 单独访问嵌入在字典内列表中的嵌套元素,python,list,dictionary,Python,List,Dictionary,我想访问公司列表中的数据,这是一个字典,实际上是一个列表。 运行此代码时,我得到“类型错误:列表索引必须是整数或切片”。j循环获取项目中的第一个列表,并用它进行迭代,直到“companys”中的每个元素都被覆盖,但我不明白为什么它不起作用。任何建议都会很有帮助 l= [{ "id":"a","name":"rocky","companies": ["1","2&quo
l= [{ "id":"a","name":"rocky","companies": ["1","2","3"], "data":"", "data2": {"x","y"} },
{"id":"b","name":"duster","companies": ["4","5","6"], "data":"", "data2": {"h","p"} } ]
for i in l:
name=i['name']
id=i['id']
for j in l[i]['companies']:
cmp= j
Output:
id name companies
a rocky 1
a rocky 2
a rocky 3
b rocky 4
b duster 5
b duster 6
这个错误是因为您正在使用列表中的项,就像在l[i]['companys']中为j使用索引
。这里i
不是索引,而是项目本身
您可以通过使用i
获得公司
来修复它,就像对于i['companys']中的j一样
另一种获得结果的方法是使用列表理解
和itemgetter
from operator import itemgetter
items = [itemgetter('id', 'name', 'companies')(x) for x in l]
result = [tuple(zip([a]*len(c), [b]*len(c), c)) for a, b, c in items]
您正在尝试使用列表项而不是索引为循环编制索引。使用此选项,例如:
for idx, i in enumerate(l):
name=i['name']
id=i['id']
for j in l[idx]['companies']:
cmp= j
现在,idx是索引列表“l”所需的整数。代码中有两个问题。第一个是您输入的列表
。第二,代码中的语法错误
for i in l:
name=i['name']
id=i['id']
for j in l[i]['companies']:
cmp= j
在这里,i
本身就是一个字典,你不能把它放在解析列表l
中,内部为lopl[i]['companys']
。这就是您收到错误的原因:“TypeError:列表索引必须是整数或片”
已更正的输入列表l
:
l = [{ "id":"a","name":"rocky","companies": ["1","2","3"], "data":"", "data2": {"x","y"}} ,{"id":"b","name":"duster","companies": ["4","5","6"], "data":"", "data2": {"h","p"} } ]
修改代码
count = 0
print("id name companies")
for i in l:
name=i['name']
id=i['id']
#print(l[count])
for j in l[count].get("companies"):
cmp = j
print("{} {} {}".format(id, name, cmp))
count += 1
输出
id name companies
a rocky 1
a rocky 2
a rocky 3
b duster 4
b duster 5
b duster 6
我基本上是一个整数,如果我们把你的逻辑翻译成“对于0['companys]中的j”。怎么可能有一个元素“0['companys]”,理想情况下它应该是l[i]['companys],对吗?i
不是索引,在pyhton中,列表中的i
,i
是列表中的每个项目。如果您想要索引,则枚举(列表)中的id和val都是
正确,但idx将迭代到列表的每个元素。我的意思是..对于l[0]['companys]..中的j,..此时'j'将查找公司内部的所有值并存储它。如果我们在我的答案中更改-“cmp=j”为“print(f'{id}{name}{j}”)“您将获得您在问题中描述的确切输出。如果这不是您想要的,请澄清预期输出