我想访问公司列表中的数据,该公司列表确实在一个字典中,该字典实际上是一个列表。 运行此代码时,出现“ 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
答案 0 :(得分:0)
该错误是因为您正在使用列表中的项,例如索引for j in l[i]['companies']
。这里的i
不是索引,而是项目本身。
您可以使用i
来修复companies
,例如for j in i['companies']
获得结果的另一种方法是使用list-comprehension
和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]
答案 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