我有一个字符串(我将其视为一个字符列表),我正在尝试通过字典理解来创建一个字典,其中包含字符串中每个字符的键以及值作为其中索引的列表出现。
例如:
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] != '_'}
仅返回字符出现的最后一个索引。
谢谢!
答案 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
作为关键字,并让相应的值成为i
中p
的索引p[i] == c
的列表。
您可以使用for c in p
而不是for c in set(p)
来遍历每个字符一次。
正如@quamrana指出的,您始终可以使用循环。在这里,循环将更具可读性。但是,为了磨练您的字典理解排骨,这是一个很好的实践问题。
答案 1 :(得分:2)
应在可能使用map
或filter
的地方使用字典理解。您需要的dict
是输入字符串的摘要。
您只需要回退到普通的for循环:
from collections import defaultdict
pattern = "abcdabccb"
summary = defaultdict(list)
for idx,c in enumerate(pattern):
summary[c].append(idx)
根据需要输出