使用Python字典理解通过第一排列索引单词列表

2024-10-03 17:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

从概念上讲,这很简单,但我似乎搞不懂。在

我想把字符串列表转换成dict,每个键都是与之相关联的单词列表的第一个字母。在

# My list of sounds
sounds = ['sniff', 'bark', 'bork', 'blork', 'heck', 'borf', 'bjork', 'boo', 'bre', 'bore']

# My dict comprehension which isn't working
indexed = {s[0]: [s] for s in sounds}

我的输出如下:

^{pr2}$

这里我缺少一个append函数,但是每次我尝试实现它时都无法给出正确的输出,或者它抛出一个SyntaxError。我错过了什么?在


Tags: of字符串概念列表my字母单词dict
3条回答

这就是你想要达到的目标吗?在

firsts = {s[0] for s in sounds}
indexed = {first: [s for s in sounds if s[0]==first] for first in firsts}

只需使用标准库就可以一次性完成这项工作

>>> sounds = ['sniff', 'bark', 'bork', 'blork', 'heck', 'borf', 'bjork', 'boo', 'bre', 'bore']
>>> result=dict()
>>> for s in sounds:
        result.setdefault(s[0],[]).append(s)

>>> result
{'b': ['bark', 'bork', 'blork', 'borf', 'bjork', 'boo', 'bre', 'bore'], 's': ['sniff'], 'h': ['heck']}
>>> 

itertools的解决方案很好,但是它需要额外的步骤来对列表进行排序,使其成为O(nlogn),而这只需一次就可以完成同样的操作,所以是O(n)

collections模块提供defaultdict,它有一个内置的setdeafult

^{pr2}$

没问题,itertools to the rescue。您可以按元素的第一个字母对它们进行分组,然后根据它们创建dict。在

sounds = ['sniff', 'bark', 'bork', 'blork', 'heck', 'borf', 'bjork', 'boo', 'bre', 'bore']
import itertools

grouped = itertools.groupby(sorted(sounds), key=lambda x: x[0])
d = {k: list(v) for k,v in grouped}
print(d)

相关问题 更多 >