我是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显示了基本上按顺序递增的键,但是在我的应用程序中,我可能会有像这样的键:
华夫饼 果汁 茶 蛋 筹码
因此它们完全是“随机的”。
答案 0 :(得分:3)
您可以将collections.OrderedDict
用于此目的:
>>> from collections import OrderedDict
>>> OrderedDict(sorted(d.items(), key=lambda x: x[1], reverse=True))