Py学习  »  Python

将python字典按相等的间隔排序

CodingBabai • 3 年前 • 1290 次点击  

我们如何根据字典键对字典进行排序,并将它们置于一致的间隔下?

例如,我们有以下python字典

{0: 1, 10: 3, 12: 2, 19: 4, 35: 5}

在上面的例子中,我们有来自 0 - 35 ,我们想把它们以10为间隔,这意味着:

interval 0-10 has values 1
interval 10-20 has values [3, 2, 4]
interval 20-30 has no values
interval 30-40 has values [5]

最终输出应与此类似:

{0: [1], 10: [3, 2, 4], 20: [0/null], 30: [5]

有什么类似蟒蛇的方法吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133568
文章 [ 2 ]  |  最新文章 3 年前
Pedro Maia
Reply   •   1 楼
Pedro Maia    3 年前

要添加缺少的值,可以使用last存储一个变量,并检查它们之间的差距是否大于10:

a = {0: 1, 10: 3, 12: 2, 19: 4, 35: 5}
out = {}
last = 0
for i in a:
    b = int(i/10) * 10
    if (b - last) > 10:
        out[b-10] = [] # whatever you want it to be
    if b in out:
        out[b].append(a[i])
    else:
        out[b] = [a[i]]
    last = b

输出:

{0: [1], 10: [3, 2, 4], 20: [], 30: [5]}
Jab
Reply   •   2 楼
Jab    3 年前

使用 collections.defaultdict :

from collections import defaultdict

data = {0: 1, 10: 3, 12: 2, 19: 4, 35: 5}
output = defaultdict(list)
for k, v in data.items():
    output[k // 10 * 10].append(v)

>>> dict(out)
{0: [1], 10: [3, 2, 4], 30: [5]}

编辑

如果必须在生成的dict中包含所有键,则用构建键的dict替换默认dict:

out = {k: [] for k in (range(0, (max(data)//10*10)+1, 10))}
for k, v in data.items():
    out[k // 10 * 10].append(v)