Python基于字典

时间:2016-06-17 18:48:59

标签: python json

我有这样的结构:

[{
    "name": "apple",
    "price": "5.0",
    "record": [
        {
            "id": "008",
            "time": 1465689600
        }
    ] 
},{
    "name": "banana",
    "price": "9.0",
    "record": [
        {
            "id": "002",
            "time": 1465682600
        }
    ]
}]

我在下面试过,但它给了我一个错误:字符串索引必须是整数。

sorted(lines, key=lambda k: k['record'].get('time', 0),reverse=True)

如何根据"时间"对上述内容进行排序?值?

感谢。

2 个答案:

答案 0 :(得分:0)

显然,你的结构是一个字符串。您需要使用json.loads

将其转换为python对象
import json

d = "[{'record': [{'id': '008', 'time': 1465689600}], 'price': '5.0', 'name': 'apple'}, {'record': [{'id': '002', 'time': 1465682600}], 'price': '9.0', 'name': 'banana'}]"

lines = json.loads(d)
sorted(lines, key=lambda k: k['record'][0].get('time', 0), reverse=True)
#                                       ^

此后,键'record'的值是一个列表。该列表在索引0处有一个dict对象。因此,您需要先访问dict对象,然后才能访问该字典的值。

答案 1 :(得分:0)

由于这是一个json,我只想使用json.loads解码它:

import json

lines = '''
[{
    "name": "apple",
    "price": "5.0",
    "record": [
        {
            "id": "008",
            "time": 1465689600
        }
    ] 
},{
    "name": "banana",
    "price": "9.0",
    "record": [
        {
            "id": "002",
            "time": 1465682600
        }
    ]
}]
'''

d = json.loads(lines)

for x in sorted(d, key=lambda k: k['record'][0].get('time', 0), reverse=True):
    print x

输出:

{u'record': [{u'id': u'008', u'time': 1465689600}], u'price': u'5.0', u'name': u'apple'}
{u'record': [{u'id': u'002', u'time': 1465682600}], u'price': u'9.0', u'name': u'banana'}