Python覆盖字典而不是附加

时间:2017-09-25 22:19:14

标签: python json

Python noob在这里。几天来一直在盯着这个,努力让它发挥作用。

以下是代码:

#!/usr/bin/env python

import requests
from requests.auth import HTTPBasicAuth
import json
import sys
import getpass
import itertools

password = 'mypassword'
def getusers():
  count = 0
  while (count < 1000):
    url = "https://blahblah/rest/api/latest/blah/member?groupname=some-group&startAt={0}&maxResults=100".format(count)
    request = requests.get(url,auth=HTTPBasicAuth('username', password.format(password)), verify=True)
    data = json.loads(request.content)
    items = data['values']
    global active
    active = []
    inactive = []
    for i in range(len(items)):
        user = items[i]
        if user['active']:
            active.append(user)
            #active.append(user.copy())
        else:
            inactive.append(user.copy())
    count += 101
getusers()
print active

计数循环:API每个GET只返回200个结果。这是计数和循环的原因。我正在尝试建立一个包含1000多个条目的字典。

startAt = :默认为从API记录位置开始&#34; 0&#34;。计数将位置增加到101,然后是202,然后是303 ......直到它到达位置1,000。因此,记录从0-101开始并且应该追加,使得我有0-202,然后是0-303,然后是0-404,依此类推。

如果用户[&#39;有效&#39;] :&#39;有效&#39;是为每个用户返回的密钥之一。如果该键= True,则发送到活动的dict,否则发送到不活动的dict。

当前行为: 当我打印我的&#34;活跃&#34; dict我得到了最后一组用户,而不是总共1,000个用户。最后一组用户从位置909开始并在位置1000结束。

预期行为: 当我打印我的&#34;活跃&#34; dict,它应该包含近1000个具有各种键/值的用户。活动用户dict应从位置0开始,以位置=结束活动用户数。

这是从JSON有效负载返回的内容的示例:

u'emailAddress': u'blahblah.com', u'key': u'bblah', u'active': True, u'timeZone': u'America/Los_Angeles'}, {u'displayName': u'Blah, Blah', u'name': u'bblah', u'self': u'https://blah.com'...]

1 个答案:

答案 0 :(得分:2)

您的代码中有几点需要注意。

首先,将 active inactive 作为词典调用是不正确的,因为它们似乎是列表,而不是字典。 (参见使用{}和[])

之间的区别

其次,您在while循环的每次迭代中将活动非活动设置为空列表,这似乎是导致问题的原因。每次while循环迭代时, active inactive 都被指定为空列表,而在while循环的上一次迭代期间填充的列表是丢失。相反,您可以在while循环范围之外进行赋值,这样您只能初始化这些列表一次。

def getusers():
  global active
  active = []
  inactive = []

  count = 0
  while (count < 1000):
    url = "https://blahblah/rest/api/latest/blah/member?groupname=some-group&startAt={0}&maxResults=100".format(count)
    request = requests.get(url,auth=HTTPBasicAuth('username', password.format(password)), verify=True)
    data = json.loads(request.content)
    items = data['values']
    for i in range(len(items)):
        user = items[i]
        if user['active']:
            active.append(user)
            #active.append(user.copy())
        else:
            inactive.append(user.copy())
    count += 101

getusers()
print active