【发布时间】:2015-11-01 09:09:39
【问题描述】:
我使用json.load(data_file)从文件中读取了一些 JSON 数据
{
"unused_account":{
"logins": 0,
"date_added": 150
},
"unused_account2":{
"logins": 0,
"date_added": 100
},
"power_user_2": {
"logins": 500,
"date_added": 400,
"date_used": 500
},
"power_user": {
"logins": 500,
"date_added": 300,
"date_used": 400
},
"regular_user": {
"logins": 20,
"date_added": 200,
"date_used": 300
}
}
我想按特定顺序对条目进行排序。我找到了很多按键或单个值排序的示例。但我想按以下规则对值进行排序:
- groupby 登录次数递减,但登录次数为 0 的用户在前
- 按添加日期对登录次数为 0 的用户进行排序
- 按使用日期对至少有 1 次登录的用户进行排序
理想情况下,我会像这样编写自己的比较函数:
def compare(elem1, elem2):
"""Return >0 if elem2 is greater than elem1
<0 if elem2 is lesser than elem1
0 if they are equal"""
#rule 1 group by logins
if elem1['logins'] != elem2['logins']:
if elem1['logins'] == 0:
return -1
if elem2['logins'] == 0:
return 1
return elem2['logins'] - elem1['logins']
# rule 2 sort on date_added
if elem1['logins'] == 0 and elem2['logins'] == 0:
return elem2['date_added'] - elem1['date_added']
#rule 3 sort on date_used
if elem1['logins'] == elem2['logins'] and elem1['loigns'] > 0:
return elem2['date_used'] - elem1['date_used']
return 0 # default
我不知道在哪里以及如何插入我的排序功能。
【问题讨论】:
-
你能给我们一个预期的输出吗?所以你首先要 0 次登录(按添加日期在哪个方向排序?然后其余的按使用日期登录,再次,哪个方向?
-
啊,不,你要先0次登录,然后降序登录,在一个登录次数相同的组内,是日期排序,降序。跨度>
-
字典是无序的数据类型,您可能需要查看集合模块中的OrderedDict。
标签: python json python-2.7 sorting dictionary