2016-06-08 75 views
-1

背景返回数字

我一些REST JSON工作的批次Python-最有效的方法通过Python调用获得用户的列表。不幸的是,服务器一次只能返回最多50个用户。 例如

呼叫“[0:49]”返回第50个用户

呼叫“[51:99]”返回下一批次50个用户

服务器的因此不会返回用户的总数,我可以编写一些逻辑来让所有用户有多个休息电话。

问题

我写了打印在字典格式的数据非常凌乱功能:

def get_all_possible_items(max_no_users): 
     dict={} 
     base=0 
     values=max_no_users//50 
     if max_no_users>49: 
      dict[base]=base+49 
      base+=49 
     else: 
      base-=1 
     for i in range(values-1): 
      base+=1 
      dict[base]=base+49 
      base+=49 
     dict[base+1]=max_no_users 

     print dict 

    get_all_possible_items(350) 

输出看起来像:

如果max_no_users是350:

{0:49,100:149,200:249,300:349,50 :99,150:199,250:299,350:350}

如果max_no_users是351:

{0:49,100:149,200:249,300:349,50 :99,150:199,250:299,350:351}

有没有更好的写作方法(必须有!)?

+0

什么是f由REST调用返回的数据的orm?我想'dict.update(json.loads(REST_data))' – nigel222

回答

1

您可以简单地使用python的range(start, stop, step)。您可以设置step为50即

>>> for i in range(0, max_no+1, 50): 
...  print i, i+49 
... 
0 49 
50 99 
100 149 
150 199 
200 249 
250 299 
300 349 
350 399 

然后可能有一个额外的if语句的最后一个号码,以确保它不会超过最大数量,即。

>>> for i in range(0, max_no+1, 50): 
...  print i, i+49 if i+49 < max_no else max_no 
... 
0 49 
50 99 
100 149 
150 199 
200 249 
250 299 
300 349 
350 350 

编辑:要重点解决如何利用这一点,做这样的事情:

def get_all_possible_items(max_no_users): 
    range_dict = {} 
    for i in range(0,max_no_users+1, 50): 
     if i+49 < max_no_users: 
      range_dict[i] = i+49 
     else: 
      range_dict[i] = max_no_users 
    return range_dict 

,或者如果你想这一切在同一行:

def get_all_possible_items(max_no_users): 
    return {i:i+49 if i+49 < max_no_users else max_no_users for i in range(0, max_no_users, 50)} 
+1

我正在写这个想法,但它首先出现。我只会补充说,你可以在循环外声明一个空字典,并在循环中用key = 1填充它,并且value = i + 49 part –

+0

我想,只要我给出了获取数字的过程,他可以找出其余的,但是,这是正确的。我将编辑。 –

+0

谢谢,这是一个完美的答案!我知道有一个更好的方法 – Thomas

0

试试这个: :您的结果不正确...在您的问题中

def get_all_possible_items(users): 
     return dict([[x, min(x+49,users) ] for x in range(0,users,50)]) 

    # or 
    #def get_all_possible_items(users): 
    #  print dict([[x, min(x+49,users) ] for x in range(0,users,50)]) 


    get_all_possible_items(350) 
     #{0: 49, 50: 99, 100: 149, 150: 199, 200: 249, 250: 299, 300: 349} 
    get_all_possible_items(351) 
     #{0: 49, 50: 99, 100: 149, 150: 199, 200: 249, 250: 299, 300: 349, 350: 351}