【问题标题】:Sorting JSON with dynamic keys by value使用动态键按值对 JSON 进行排序
【发布时间】:2019-06-06 22:45:04
【问题描述】:

我对 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 显示的键基本上是按顺序递增的,但在我的应用程序中,我可能有如下键:

华夫饼 果汁 茶 蛋 筹码

所以它们是完全“随机的”。

【问题讨论】:

标签: python json sorting


【解决方案1】:

您可以为此目的使用collections.OrderedDict

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

【讨论】:

  • 你绝对摇滚。非常感谢 :) 必须等待几分钟,但我会尽可能接受这个答案。
猜你喜欢
  • 2021-04-03
  • 2018-07-05
  • 2012-11-06
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2013-09-22
相关资源
最近更新 更多