将字符串列表中的字符映射到字典中,索引为键

时间:2015-10-06 20:19:40

标签: python dictionary

我要求将一个字符串列表放入字典中,这样字符的索引就是键,值是组合字符。
我正试图尽可能简洁。

我的代码:

a = ['apple','pear']
b = map(lambda x:dict(enumerate(x)),a)
print b

输出:

[{0: 'a', 1: 'p', 2: 'p', 3: 'l', 4: 'e'}, {0: 'p', 1: 'e', 2: 'a', 3: 'r'}]

期望的输出:

{0:'ap',1:'pe',2:'pa',3:'lr',4:'e'}

4 个答案:

答案 0 :(得分:4)

你想要拉链

dict(enumerate(zip(*a)))

或者也许是izip_longest

dict(enumerate(itertools.izip_longest(*a,fillvalue="")))

如果你真的需要,你可以很容易地加入这些信件

{k:"".join(v) for k,v in result.items()}

答案 1 :(得分:3)

你可以在词典理解中使用itertools.zip_longest(在python 2 itertools.izip_longest中):

>>> from itertools import zip_longest
>>> 
>>> {i:''.join(j) for i,j in enumerate(zip_longest(*a,fillvalue=''))}
{0: 'ap', 1: 'pe', 2: 'pa', 3: 'lr', 4: 'e'}

答案 2 :(得分:1)

类似的解决方案

{i: x+y for i, (x,y) in enumerate(zip_longest(*a,fillvalue=''))}

{0: 'ap', 1: 'pe', 2: 'pa', 3: 'lr', 4: 'e'}

答案 3 :(得分:1)

你知道我是否可以在没有itertools导入的情况下执行此操作,是的map将在你使用python2时捕获更短的字符串:

a = ['apple','pear']
b = {i: a + b if b else a  for i, (a, b) in enumerate(map(None,*a))}

print(b)
{0: 'ap', 1: 'pe', 2: 'pa', 3: 'lr', 4: 'e'}

要为a或b工作不同的长度,我们需要更多的逻辑:

b = {i: a if not b else b if not a else a + b for i,(a, b) in enumerate(map(None, *a))}

map(None,*a)的行为有点像zip_longest,None将用作较短字符串的fillvalue。我们只检查a或b是否为None,并根据结果做适当的事情。