python按值排序_python按值对json排序列表

I have a file consists of JSON, each a line, and want to sort the file by update_time reversed.

sample JSON file:

{ "page": { "url": "url1", "update_time": "1415387875"}, "other_key": {} }

{ "page": { "url": "url2", "update_time": "1415381963"}, "other_key": {} }

{ "page": { "url": "url3", "update_time": "1415384938"}, "other_key": {} }

want output:

{ "page": { "url": "url1", "update_time": "1415387875"}, "other_key": {} }

{ "page": { "url": "url3", "update_time": "1415384938"}, "other_key": {} }

{ "page": { "url": "url2", "update_time": "1415381963"}, "other_key": {} }

my code:

#!/bin/env python

#coding: utf8

import sys

import os

import json

import operator

#load json from file

lines = []

while True:

line = sys.stdin.readline()

if not line: break

line = line.strip()

json_obj = json.loads(line)

lines.append(json_obj)

#sort json

lines = sorted(lines, key=lambda k: k['page']['update_time'], reverse=True)

#output result

for line in lines:

print line

The code works fine with sample JSON file, but if a JSON has no 'update_time', it will raise KeyError exception. Are there non-exception ways to do this?

解决方案

Write a function that uses try...except to handle the KeyError, then use this as the key argument instead of your lambda.

def extract_time(json):

try:

# Also convert to int since update_time will be string. When comparing

# strings, "10" is smaller than "2".

return int(json['page']['update_time'])

except KeyError:

return 0

# lines.sort() is more efficient than lines = lines.sorted()

lines.sort(key=extract_time, reverse=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值