簡體   English   中英

使用列表理解的列表字典

[英]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 指出的那樣,您始終可以使用循環。 在這里,循環會更具可讀性。 但是為了磨練你的聽寫理解能力,這是一個很好的練習題。

在可能使用mapfilter的地方應該使用字典理解。 您想要的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM