2017-10-16 135 views
0

JSON结构和匹配值解析名单我有以下的代码,给出了基于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

回答

1

的匹配组合这应做到:

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值应该在函数中可用。

1

你可以简单地这样做

>>> 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' 
>>>