python - Python 字典,键为频率,值为字母
问题描述
如果我有一个像“你好”这样的词,我希望程序生成一个字典,其中键是字母的出现次数,值是字母列表。所以“你好”会生成{1: ['h', 'e', 'o'], 2: ["l"]}
.
解决方案
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] += 1
key
c
因此,Counter("hello")
是字典Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
您正在尝试“反转”的是这本字典。
现在,您只需要创建一个列表字典,并附加字母,其中键是前面的值Counter
。
还有另一个字典类,或多或少像Counter
: defaultdict
。它允许决定什么是初始值。例如, adefaultdict(list)
具有初始值[]
(或等效地,list()
)。所以有了,即使还不是一键h = defaultdict(list)
,你也可以做到。h[1].append("e")
1
h
请注意,Counter
和defaultdict
都是 的子类dict
。
另请参阅集合模块的文档。
推荐阅读
- python - 将行存储到数组中并逐行打印
- android - Android 样式/主题未按预期工作
- sql - 如何按条件计算聚合值?
- python - 如何定义函数使用循环并返回多值
- node.js - 按照 Twilio 教程录制电话:导致 404 HTTP 错误
- python - 气流每 57 秒执行一次,与计划间隔无关
- java - 如何在不使用 collections.swap 的情况下交换链表中的元素
- elasticsearch - 如何使用查询来区分字段不存在或存在但其值为空数组?
- javascript - JS的多维数组
- instagram-api - 是否有任何用于 Story 的公共 Instagram API?获取 Instagram 故事 Json