首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单独访问嵌套在字典中列表中的元素

单独访问嵌套在字典中列表中的元素
EN

Stack Overflow用户
提问于 2020-10-15 08:58:21
回答 3查看 47关注 0票数 0

我想访问公司名单中的数据,这是在字典中,实际上是一个列表。在运行这段代码时,我得到了"TypeError:列表索引必须是整数或片“。J循环接受项目中的第一个列表,并使用它进行迭代,直到“companies”中的每个元素都被覆盖为止,但是我不明白为什么它不能工作。任何建议都会很有帮助

代码语言:javascript
复制
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 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-15 09:07:16

您正在尝试使用列表项而不是索引来索引您的循环。例如,使用这个:

代码语言:javascript
复制
for idx, i in enumerate(l):
    name=i['name']
    id=i['id']
    for j in l[idx]['companies']:
        cmp= j

现在,idx是索引列表"l“所需的整数。

票数 0
EN

Stack Overflow用户

发布于 2020-10-15 09:06:34

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

您可以通过使用i来获得类似于for j in i['companies']companies来修复它。

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

代码语言:javascript
复制
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]
票数 0
EN

Stack Overflow用户

发布于 2020-10-15 09:28:15

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

代码语言:javascript
复制
for i in l:
    name=i['name']
    id=i['id']
    for j in l[i]['companies']:
        cmp= j

在这里,i本身就是一个字典,您不能将它用于解析list l和inner for lop l[i]['companies']。这就是您获得错误的原因:"TypeError: list indices must be integers or slices"

l**:** 校正输入列表

代码语言:javascript
复制
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"} } ]

修改代码

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
id name companies
a  rocky  1
a  rocky  2
a  rocky  3
b  duster  4
b  duster  5
b  duster  6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64368126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档