2017-09-25 190 views
0

Python noob here。一直盯着這個日子,試圖讓它工作。Python覆蓋字典而不是追加

下面的代碼:

#!/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將僅返回每獲得200個結果。這是計數和循環的原因。我正在嘗試創建一個包含1000多個條目的字典。

startAt =:從API記錄位置「0」開始的默認值。計數將位置增加到101,然後是202,然後是303 ......直到達到位置1,000。所以,記錄從0-101開始,並且應該追加記錄0-202,然後是0-303,然後是0-404,依此類推。

如果用戶['active']:'active'是每個用戶返回的密鑰之一。如果該鍵=真,發送到活動字典,否則發送到無效字典。

當前行爲: 當我打印我的「主動」字典時,我得到最後一組用戶,而不是總共1,000個用戶。用戶的那最後一組在909位置和結束位置開始,1000

預期的行爲: 當我打印我的「活躍」快譯通,它應該包含近1000個用戶有各種鍵/值。活躍的用戶字典應該從位置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'...] 
+2

您每次重新分配'active'空列表您while循環中:'有效= []' –

+0

我不知道這是標準的方法,但我的戰術運用很多是嘗試:my_list.append(new_item),除了:my_list = new_item。這使得不需要將my_list初始化爲空列表;如果my_list不存在,則try塊將失敗,並且將執行except塊,將列表初始化爲第一項。你當然必須確保沒有你不想要的已經創建的my_list。 – Acccumulation

回答

2

有幾件事情在你的代碼要注意。

首先,調用活躍不活躍辭書是不正確的,因爲他們似乎是列表,而不是字典。 (參見使用{}和[]之間的差)

其次,要設置活躍不活躍清空列表while循環,這似乎是你的問題的原因的每次迭代。每次while循環迭代時,活動的不活動的被分配爲空列表,並且在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 
+0

ahhhh,這就是爲什麼!非常感謝! – Kryten