分别访问嵌套在字典内列表内的嵌套元素

时间:2020-10-15 08:58:21

标签: python list dictionary

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

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 

3 个答案:

答案 0 :(得分:0)

该错误是因为您正在使用列表中的项,例如索引for j in l[i]['companies']。这里的i不是索引,而是项目本身。

您可以使用i来修复companies,例如for j in i['companies']

获得结果的另一种方法是使用list-comprehensionitemgetter

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]

答案 1 :(得分:0)

您正在尝试使用列表条目而不是索引来索引循环。使用此示例,例如:

for idx, i in enumerate(l):
    name=i['name']
    id=i['id']
    for j in l[idx]['companies']:
        cmp= j

现在,idx是一个整数,用于索引列表“ l”

答案 2 :(得分:0)

您的代码中有两个问题。您输入的list第一个。第二,代码中的语法错误。

for i in l:
    name=i['name']
    id=i['id']
    for j in l[i]['companies']:
        cmp= j

在这里,i本身就是一个字典,您不能将其与内部l一起解析为列表l[i]['companies']。这是您收到错误的原因:"TypeError: list indices must be integers or slices"

更正的输入列表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