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

Python 将字符串列表中的字符映射到以索引为键的字典中,python,dictionary,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'}

我要求将字符串列表放入字典中,这样字符的索引就是键,值就是组合字符。
我正在尽可能简明扼要地写这篇文章

我的代码:

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'}
你要拉链吗

dict(enumerate(zip(*a)))
或者伊兹普

dict(enumerate(itertools.izip_longest(*a,fillvalue="")))
如果你真的需要,你可以很容易地加入字母

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

您可以在dict理解中使用
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'}
相似解

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

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

您知道如果我不需要itertools导入就可以完成此操作,那么当您使用python2时,yes
map
将用于捕获较短的字符串:

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\u longest
,None将用作较短字符串的填充值。我们只需检查a或b是否为无,然后根据结果执行适当的操作。

pa来自哪里?哦,我现在明白了…不产生预期的输出它只是不加入字母。。。但我想他可以通过join+1为他提供一个完整的解决方案来完成这项出色的工作:)@JoranBeasley我错过了你的编辑,否则我会为你评论的!你知道我是否可以在没有itertools导入的情况下完成这项工作吗?然后你必须自己编写zip_。拉链最快会停下来。