将嵌套列表转换成字典

时间:2018-07-28 05:09:39

标签: python dictionary

b = [['a', '1'], ['b', '2'], ['c', '3']]
c = {}
for i in range(len(b)):
    m = i[0]
    c[m] = i[1]

我的目标是使嵌套列表b成为字典。但是,我不断收到错误消息

  

TypeError:'int'对象不可下标

3 个答案:

答案 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'}