b = [['a', '1'], ['b', '2'], ['c', '3']]
c = {}
for i in range(len(b)):
m = i[0]
c[m] = i[1]
我的目标是使嵌套列表b
成为字典。但是,我不断收到错误消息
TypeError:'int'对象不可下标
答案 0 :(得分:3)
尝试一下:
b = [['a', '1'], ['b', '2'], ['c', '3']]
d={}
for i in b:
d[i[0]]=i[1]
答案 1 :(得分:3)
我将解释您的代码的主要问题。但最重要的是,最好使用dict理解:
{k:v for k, v in b}
# {'a': '1', 'b': '2', 'c': '3'}
或者只是:
dict(b)
原样的代码将引发错误:
TypeError:“ int”对象不可下标
要了解原因,请尝试for i in range(len(b)): print(i)
。您将看到循环迭代值只是b
的索引值,而不是存储在b
中的列表。
由于i[0]
只是一个整数,因此无法进行i
。您想要的更像b[i][0]
。但是有更简单的方法可以做到这一点。
尤其要尝试使用for i in b: print(i)
。
您会看到现在您的迭代将b
中的每个列表放入i
中,然后可以按计划执行m = i[0]
。之后,您的代码将起作用,并将每个字典值(i[1]
)存储在每个字典键(m
)中:
for i in b:
m = i[0]
c[m] = i[1]
注意:尽管在跟踪索引值时通常使用i
,但出于同样的原因,对于其他种类的迭代值使用i
并不是最佳实践。为了避免混淆自己的未来,在这种情况下,请使用x
甚至是current_list
而不是i
作为循环迭代器名称。 (但实际上,我建议您只使用本文开头的更简单的替代方法。)
答案 2 :(得分:2)
问题是您试图将其索引为整数i
,就好像它是一个列表一样。我认为您的意思是b[i][0]
(这是说:给我b
中第 i 个项目中第 0 个项目)。
这容易一些:
b = [['a', '1'], ['b', '2'], ['c', '3']]
d = dict(b)
print(d)
输出:
{'a': '1', 'b': '2', 'c': '3'}