使用列表理解的列表字典

时间:2020-11-11 08:25:58

标签: python list dictionary list-comprehension

我有一个字符串(我将其视为一个字符列表),我正在尝试通过字典理解来创建一个字典,其中包含字符串中每个字符的键以及值作为其中索引的列表出现。

例如:

pattern = "abcdabccb"

所需字典:

{'a' : [0,4], 'b' : [1,5,8], 'c':[2,6,7], 'd':[3]}

到目前为止最好的尝试:

{pattern[i]: [i] for i in range(0, len(pattern)) if pattern[i] != '_'}

仅返回字符出现的最后一个索引。

谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个有趣的问题。您需要在dict-comprehension中有一个列表理解:

>>> p = "abcdabccb"; # pattern
>>> {c: [i for i in range(len(p)) if p[i] == c] for c in p}
{'a': [0, 4], 'b': [1, 5, 8], 'c': [2, 6, 7], 'd': [3]}
>>> 

用简单的话来说,这就是理解力所说的
通过遍历模式c中的每个字符p来组成字典。使用每个c作为关键字,并让相应的值成为ip的索引p[i] == c的列表。

您可以使用for c in p而不是for c in set(p)来遍历每个字符一次。

正如@quamrana指出的,您始终可以使用循环。在这里,循环将更具可读性。但是,为了磨练您的字典理解排骨,这是一个很好的实践问题。

答案 1 :(得分:2)

应在可能使用mapfilter的地方使用字典理解。您需要的dict是输入字符串的摘要。

您只需要回退到普通的for循环:

from collections import defaultdict

pattern = "abcdabccb"
summary = defaultdict(list)

for idx,c in enumerate(pattern):
    summary[c].append(idx)

根据需要输出

相关问题