Skip to main content
 首页 » 编程设计

python之使用 Python 字典理解按首字母索引单词列表

2025年05月04日14tuyile006

从概念上讲,这很容易,但我似乎无法弄明白。

我想把一个字符串列表变成一个字典,每个键都是与之关联的单词列表的第一个字母。

# 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} 

我的输出是这样的:

{'h': ['heck'], 's': ['sniff'], 'b': ['bore']} 

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

请您参考如下方法:

这可以通过标准库一次性完成

>>> 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(n log n),而这一次完成相同的操作也是 O(n)

collections模块报价defaultdict在 setdeafult

中构建
>>> from collections import defaultdict 
>>> result=defaultdict(list) 
>>> for s in sounds: 
        result[s[0]].append(s) 
 
>>> result 
defaultdict(<class 'list'>, {'b': ['bark', 'bork', 'blork', 'borf', 'bjork', 'boo', 'bre', 'bore'], 's': ['sniff'], 'h': ['heck']}) 
>>>