首页 > 解决方案 > 将值归因于 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])

标签: pythonpython-3.xdictionarykey

解决方案


您应该遍历 中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),因为这将附加一个列表,而不是单个元素,因此我们重新分配将前一个列表与我们的新元素连接的结果。


推荐阅读