python中json结构和匹配值的解析列表

2024-05-29 02:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码,根据IP提供城市:

RANGES = {
        'Paris': [
            {'start': '10.10.0.0', 'end': '10.10.255.255'},
            {'start': '192.168.1.0', 'end': '192.168.1.255'},
        ],
        'NYC': [
            {'start': '10.12.0.0', 'end': '10.12.255.255'},
            {'start': '172.16.10.0', 'end': '172.16.11.255'},
            {'start': '192.168.2.0', 'end': '192.168.2.255'},
        ]
    }

def get_city(self, ip):
        print 'Here'
        for city, ipranges in self.RANGES.items():
            for iprange in ipranges:
                if ip >= iprange['start'] and ip <= iprange['end']:
                    return city

我还有一个变量:

RECORDS = [
        {'user_id': 1, 'created_at': '2017-01-01T10:00:00', 'status': 'paying'},
        {'user_id': 1, 'created_at': '2017-03-01T19:00:00', 'status': 'paying'},
        {'user_id': 1, 'created_at': '2017-02-01T12:00:00', 'status': 'cancelled'},
        {'user_id': 3, 'created_at': '2017-10-01T10:00:00', 'status': 'paying'},
        {'user_id': 3, 'created_at': '2016-02-01T05:00:00', 'status': 'cancelled'},
    ]

为此,我尝试实现以下功能:

 def get_status(self, user_id, date): //should return the status

我不知道如何解析列表->;匹配值->;返回created_atuser_id匹配组合的状态


Tags: selfipidcitygetdefstatusstart
2条回答

你可以这么做

>>> def get_status(user_id, date):
    for rec in RECORDS:
        if rec['user_id'] == user_id and rec['created_at'] == date:
            return rec['status']
>>> get_status(1, '2017-01-01T10:00:00')
'paying'
>>> 

这应该做到:

def get_status(user_id, date):
    for i,ele in enumerate(RECORDS): 
        if ele['user_id']==user_id and ele['created_at']==date: 
            return ele['status']

print(get_status(1, '2017-02-01T12:00:00'))
#'cancelled'

这里,我们将遍历list,并使用其中的dict元素来匹配其键(user_idcreated_at),并检查这些值是否与所需的值匹配。当然,确保RECORDS值在函数中可用。你知道吗

相关问题 更多 >

    热门问题