Python 单独访问嵌入在字典内列表中的嵌套元素

Python 单独访问嵌入在字典内列表中的嵌套元素,python,list,dictionary,Python,List,Dictionary,我想访问公司列表中的数据,这是一个字典,实际上是一个列表。 运行此代码时,我得到“类型错误:列表索引必须是整数或切片”。j循环获取项目中的第一个列表,并用它进行迭代,直到“companys”中的每个元素都被覆盖,但我不明白为什么它不起作用。任何建议都会很有帮助 l= [{ "id":"a","name":"rocky","companies": ["1","2&quo

我想访问公司列表中的数据,这是一个字典,实际上是一个列表。 运行此代码时,我得到“类型错误:列表索引必须是整数或切片”。j循环获取项目中的第一个列表,并用它进行迭代,直到“companys”中的每个元素都被覆盖,但我不明白为什么它不起作用。任何建议都会很有帮助

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
中,内部为lop
l[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}”)“您将获得您在问题中描述的确切输出。如果这不是您想要的,请澄清预期输出