社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

CodingBabai • 2 年前 • 391 次点击  

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

例如,我们有以下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
 
391 次点击  
文章 [ 2 ]  |  最新文章 2 年前
Pedro Maia
Reply   •   1 楼
Pedro Maia    2 年前

要添加缺少的值,可以使用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    2 年前

使用 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)