如何将列表转换为字典?

时间:2013-08-27 14:17:29

标签: python list dictionary python-3.x

我有一个这样的清单:

listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]

我想把它转换成这样的字典:

{'AAA':'K', 'AAC': 'N', 'AAG':'K'}

5 个答案:

答案 0 :(得分:4)

您可以尝试这样的事情:

>>> l = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K']
>>>
>>> v = iter(l)
>>> {s: next(v) for s in v}
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}

这是Python 3.3.2中的一个小时间比较:

>>> from timeit import timeit
>>> setup = "l = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K']"
>>> 
>>> timeit("v = iter(l); {s: next(v) for s in v}", setup)
0.7127587589984614
>>> 
>>> timeit("dict(zip(l[::2],l[1::2]))", setup)
1.4540460520001943
>>> 
>>> timeit("dict(zip(*[iter(l)]*2))", setup)
1.395266197001547
>>> 
>>> timeit("{k: l[i+1] for i,k in enumerate(l) if not i%2}", setup)
1.4753028479990462

<强>参考:

答案 1 :(得分:4)

按两个步骤浏览列表,将结果压缩在一起,给出一个元组列表,这些元组将成为您的键/值对,然后将该元组列表转换为字典:

>>> dict(zip(l[::2],l[1::2]))
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}

答案 2 :(得分:1)

只是一些味道:

d = { k : listedd[i+1] for i, k in enumerate(listedd) if not i % 2}

答案 3 :(得分:0)

我认为最短的方法是使用切片:

>>> listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
>>> result = dict(zip(listedd[::2], listedd[1::2]))
{'AAA': 'K', 'AAC': 'N', 'AAG': 'K'}

此代码实际上将列表的所有偶数元素映射到它的奇数元素。

更新:我错过了以前的帖子,抱歉))

答案 4 :(得分:0)

使用iterzip的另一种方式:

dict(zip(*[iter(listedd)]*2))

或者,如果您更喜欢较长的程序而不是较短的程序:

>>> listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
>>> it = iter(listedd)
>>> z = zip(it,it)
>>> d = dict(z)
>>> print d
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}