从概念上讲,这很容易,但我似乎无法弄明白。
我想把一个字符串列表变成一个字典,每个键都是与之关联的单词列表的第一个字母。
# 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']})
>>>
