尝试遍历列表(未知长度)并构建一个字典,其值为列表内容和按顺序分配的键(a,b,c等等)
我到目前为止:
>>> import itertools; import string
>>> names = ['bob', 'fred', 'tracy']
>>> abc = string.ascii_lowercase
>>> letter = itertools.cycle(abc)
>>> [ dict(zip(letter.next(), n)) for n in names ]
[{'a': 'b'}, {'b': 'f'}, {'c': 't'}]
我想要的时候
[{'a': 'bob'}, {'b': 'fred'}, {'c': 'tracy'}]
答案 0 :(得分:1)
你可以这样做:
>>> [dict(zip(letter, names))]
[{'a': 'bob', 'c': 'tracy', 'b': 'fred'}]
答案 1 :(得分:1)
几乎! zip
打破了你的名字,所以你可以将一个2元组的列表传递给dict
,如下所示:
>>> [ dict([(next(letter), n)]) for n in names ]
[{'a': 'bob'}, {'b': 'fred'}, {'c': 'tracy'}]
或者,您可以使用字典理解来构建每个字典,从而允许您保存一些样板文件:
>>> [ { next(letter): n } for n in names ]
[{'a': 'bob'}, {'b': 'fred'}, {'c': 'tracy'}]
请注意,我正在使用next
而不是iterator.next
,因为现在消耗的是迭代器。
答案 2 :(得分:0)
names = ['bob', 'fred', 'tracy']
abc = string.ascii_lowercase
dct={}
for x,y in zip(abc,names):
dct[x]=y
print (dct)
也会奏效。你不必担心它的长度(正如@AshwiniChaudhary所说,我们假设你已经知道你只能使用26个项目,因为这是英文字母的长度)。 zip()
函数用于逐个匹配它们并定义它们的dict键/值。
输出:
>>>
{'a': 'bob', 'b': 'fred', 'c': 'tracy'}
>>>
或者单行;
a=[dict(zip(abc, names))]
print (a)
答案 3 :(得分:0)
from itertools import izip, cycle
from string import ascii_lowercase as letters
names = ['bob', 'fred', 'tracy']
[{k[0]:k[1]} for k in izip(cycle(letters),names)]
izip
会返回这样的元组:('a' , 'bob')
然后,您只需使用k[0]
和k[1]
创建字典。