我有一个这样的列表:
listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
我想把它转换成这样的字典:
{'AAA':'K', 'AAC': 'N', 'AAG':'K'}
我有一个这样的列表:
listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
我想把它转换成这样的字典:
{'AAA':'K', 'AAC': 'N', 'AAG':'K'}
逐个遍历列表,将结果压缩在一起,给出将成为键/值对的元组列表,然后将该元组列表转换为字典:
>>> dict(zip(l[::2],l[1::2]))
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}
你可以尝试这样的事情:
>>> 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
参考:
只是一些味道:
d = { k : listedd[i+1] for i, k in enumerate(listedd) if not i % 2}
使用iter
and的另一种方法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'}
我认为最短的方法是使用切片:
>>> listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
>>> result = dict(zip(listedd[::2], listedd[1::2]))
{'AAA': 'K', 'AAC': 'N', 'AAG': 'K'}
这段代码确实将列表的所有偶数元素映射到它的奇数元素。
更新:我错过了以前的帖子,对不起))