从列表内容(值)和连续字母构建字典作为键

时间:2015-01-20 07:21:07

标签: python dictionary

尝试遍历列表(未知长度)并构建一个字典,其值为列表内容和按顺序分配的键(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'}]

4 个答案:

答案 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]创建字典。