3

我有一个这样的列表:

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

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

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

5 回答 5

4

逐个遍历列表,将结果压缩在一起,给出将成为键/值对的元组列表,然后将该元组列表转换为字典:

>>> dict(zip(l[::2],l[1::2]))
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}
于 2013-08-27T14:30:43.160 回答
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

参考:

于 2013-08-27T14:19:26.300 回答
1

只是一些味道:

d = { k : listedd[i+1] for i, k in enumerate(listedd) if not i % 2}
于 2013-08-27T14:35:34.770 回答
0

使用iterand的另一种方法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'}
于 2013-08-27T14:50:59.487 回答
0

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

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

这段代码确实将列表的所有偶数元素映射到它的奇数元素。

更新:我错过了以前的帖子,对不起))

于 2013-08-27T14:34:15.887 回答