[英]Dictionary of lists using 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] != '_'}
僅返回字符出現的最后一個索引。
提前致謝!
這是一個有趣的問題。 您需要在字典理解中進行列表理解:
>>> 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]}
>>>
簡而言之,這就是理解所說的:
通過迭代模式p
中的每個字符c
來組成字典。 使用每個c
作為鍵,並讓相應的值成為p
中此類索引i
的列表,其中p[i] == c
。
您可以for c in set(p)
而不是for c in p
中的 for c 來迭代每個字符一次。
正如@quamrana 指出的那樣,您始終可以使用循環。 在這里,循環會更具可讀性。 但是為了磨練你的聽寫理解能力,這是一個很好的練習題。
在可能使用map
或filter
的地方應該使用字典理解。 您想要的dict
是輸入字符串的摘要。
你只需要回到一個普通的 for 循環:
from collections import defaultdict
pattern = "abcdabccb"
summary = defaultdict(list)
for idx,c in enumerate(pattern):
summary[c].append(idx)
Output 根據需要
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.