按值对具有动态键的JSON排序

时间:2019-01-12 02:08:44

标签: python json sorting

我是python的新手,所以如果我采取愚蠢的方法,我深表歉意。

基本上,我有一堆具有可变键的json数据。这些代表统计数据。我正在尝试从最高到最低排序数据,以显示使用最多的数据。

JSON EX:

{
    "key1" : 10,
    "key2" : 35,
    "key3" : 5
}

所需的输出:

{
    "key2" : 35,
    "key1" : 10,
    "key3" : 5
}

所以我目前拥有的是:

def single_val(data):
sorted_values = {'default': -10}
keys = map(str, data.keys())

for i in range(len(data)):
    if(i == 0):
        sorted_values[keys[0]] = sorted_values.pop('default')
        sorted_values[keys[0]] = data[keys[0]]
    else:
        if(sorted_values.values()[i - 1] < data[keys[i]]):
            sorted_values[keys[i]] = sorted_values.pop(keys[i - 1])
            sorted_values[keys[i]] = data[keys[i]]
            sorted_values[keys[i - 1]] = data[keys[i - 1]]
        else:
            sorted_values[keys[i]] = data[keys[i]]

所以问题是这仅适用于前3或4个迭代。之后,事情开始出现故障,只是不再工作了。

上面的思考过程是,如果新值小于prev,则应为prev,而prev应为新。这不是真的。

那么关于如何解决这个问题的任何想法?

编辑:

只想添加,上面的json显示了基本上按顺序递增的键,但是在我的应用程序中,我可能会有像这样的键:

华夫饼 果汁 茶 蛋 筹码

因此它们完全是“随机的”。

1 个答案:

答案 0 :(得分:3)

您可以将collections.OrderedDict用于此目的:

>>> from collections import OrderedDict
>>> OrderedDict(sorted(d.items(), key=lambda x: x[1], reverse=True))