首页 > 解决方案 > Python 字典,键为频率,值为字母

问题描述

如果我有一个像“你好”这样的词,我希望程序生成一个字典,其中键是字母的出现次数,值是字母列表。所以“你好”会生成{1: ['h', 'e', 'o'], 2: ["l"]}.

标签: python

解决方案


from collections import defaultdict, Counter

def occurrences(s):
    h = defaultdict(list)
    for k, v in Counter(s).items():
        h[v].append(k)
    return h

occurrences("hello")

输出

defaultdict(<class 'list'>, {1: ['h', 'e', 'o'], 2: ['l']})

ACounter是一个自动初始化为零的字典:即使c = Counter()还没有在. 另一个好处是,如果您传递一个类似列表的对象,它会立即构建一个带有计数的字典。字符串被解释为字符列表。c[key] += 1keyc

因此,Counter("hello")是字典Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})

您正在尝试“反转”的是这本字典。

现在,您只需要创建一个列表字典,并附加字母,其中键是前面的值Counter

还有另一个字典类,或多或少像Counter: defaultdict。它允许决定什么是初始值。例如, adefaultdict(list)具有初始值[](或等效地,list())。所以有了,即使还不是一键h = defaultdict(list),你也可以做到。h[1].append("e")1h

请注意,Counterdefaultdict都是 的子类dict

另请参阅集合模块的文档。


推荐阅读