我有一个这样的清单:
listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
我想把它转换成这样的字典:
{'AAA':'K', 'AAC': 'N', 'AAG':'K'}
答案 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)
使用iter
和zip
的另一种方式:
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'}