python - 将值归因于 pyhon 3.x 中的字典
问题描述
我想将一个值归因于字典(dicio),其中 KEYS = 列表中数字的计数,而 VALUES = 具有该计数的数字。
只是想知道为什么会这样:
for elem in list_A:
dicio[list_A.count(elem)] = dicio.setdefault(list_A.count(elem),[]) + [elem]
而这不会(使用 .append 或 .extend):
for elem in list_A:
dicio[list_A.count(elem)] = dicio.setdefault(list_A.count(elem),[]).extend([elem])
解决方案
您应该遍历 中set
的值list_A
,因为这样您就不会一遍又一遍地计数(它更有效)。
然后,您可以将已创建(或创建然后添加)的键添加到列表中,该列表中的元素重复出现的次数list_A
。
也就是说:
dicio = {}
for elem in set(list_A):
count = list_A.count(elem)
dicio[count] = dicio.setdefault(count, []) + [elem] * count
例子:
>>> list_A = [1, 2, 2, 2, 1, 5, 1, 7, 5, 7, 3]
>>> dicio = {}
>>> for elem in set(list_A):
... count = list_A.count(elem)
... dicio[count] = dicio.setdefault(count, []) + [elem] * count
...
>>> dicio
{3: [1, 1, 1, 2, 2, 2], 1: [3], 2: [5, 5, 7, 7]}
请注意,这不能以看起来更整洁的方式完成:dicio.setdefault(count, []).append([elem] * count)
,因为这将附加一个列表,而不是单个元素,因此我们重新分配将前一个列表与我们的新元素连接的结果。
推荐阅读
- excel - 尝试将宏分配给按钮,但出现“公式太复杂而无法分配给对象”错误
- mysql - 在表 MYSQL 中创建派生属性的问题
- unity3d - 在 DontDestroyOnLoad 场景中,Unity 被破坏的对象不会在其主场景中重新创建
- node.js - 部署中的heroku崩溃找不到模块
- php - Laravel 8:如何将图像存储到数据库(使用正确的文件路径)并将其显示到视图中
- python - 使用 Pytest 在函数中模拟引发异常
- nest-device-access - Google Nest 摄像头扩展直播
- docker - Gitlab 到远程 docker - 持续开发
- spring-boot - Azure 工件限制为 500Mb
- c - Weird gcc warning with _Generic