Python-返回批量数字的最有效方法

时间:2016-06-08 15:53:24

标签: python dictionary numbers logic

背景

我正在通过python进行一些REST JSON调用以获取用户列表。不幸的是,服务器一次最多只能返回50个用户。 e.g。

打电话" [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}

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

2 个答案:

答案 0 :(得分:1)

你可以简单地使用python' s range(start, stop, step)。您可以将step设置为50. ie,

>>> 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 :(得分: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}