Python 3.x 根据请求将Dict追加到嵌套列表
我目前正在浏览一个XMLAPI响应。我希望为每个请求收集一段信息,并在每次找到这段数据时创建一个字典。每个请求可以有几个ID。因此,一个响应可以有2个ID,而下一个响应可能有3个ID。例如,假设第一个响应有两个ID。当第二个请求完成时,我将这些数据存储在一个列表中,另外3个ID也存储在同一个列表中Python 3.x 根据请求将Dict追加到嵌套列表,python-3.x,pandas,beautifulsoup,python-requests,Python 3.x,Pandas,Beautifulsoup,Python Requests,我目前正在浏览一个XMLAPI响应。我希望为每个请求收集一段信息,并在每次找到这段数据时创建一个字典。每个请求可以有几个ID。因此,一个响应可以有2个ID,而下一个响应可能有3个ID。例如,假设第一个响应有两个ID。当第二个请求完成时,我将这些数据存储在一个列表中,另外3个ID也存储在同一个列表中 import requests import pandas as pd from pandas import DataFrame from bs4 import BeautifulSoup impor
import requests
import pandas as pd
from pandas import DataFrame
from bs4 import BeautifulSoup
import datetime as datetime
import json
import time
trackingDomain = ''
domain = ''
aIDs = []
cIDs = []
url = "https://" + domain + ""
print(url)
df = pd.read_csv('campids.csv')
for index, row in df.iterrows():
payload = {'api_key':'',
'campaign_id':'0',
'site_offer_id':row['IDs'],
'source_affiliate_id':'0',
'channel_id':'0',
'account_status_id':'0',
'media_type_id':'0',
'start_at_row':'0',
'row_limit':'0',
'sort_field':'campaign_id',
'sort_descending':'TRUE'
}
print('Campaign Payload', payload)
r = requests.get(url, params=payload)
print(r.status_code)
soup = BeautifulSoup(r.text, 'lxml')
success = soup.find('success').string
for affIDs in soup.select('campaign'):
affID = affIDs.find('source_affiliate_id').string
aIDs.append(affID)
dataDict = dict()
dataDict['offers'] = []
affDict = {'affliate_id':aIDs}
dataDict['offers'].append(dict(affDict))
结果如下:
dictData = {'offers': [{'affliate_id': ['9','2','45','47','14','8','30','30','2','2','9','2']}]}
我希望做的是:
dictData = {'offers':[{'affiliate_id'['9','2','45','47','14','8','30','30','2','2']},{'affiliate_id':['9','2']}]}
根据第一次请求,我获得以下信息:
IDs['9','2','45','47','14','8','30','30','2','2']
在第二次请求时,将返回这些ID:
['9','2']
我是Python新手,所以请容忍我的礼节,我错过了一些东西。我很乐意提供任何其他信息。这与初始化和追加的顺序有关,这会导致您无法获得想要的结果。每次迭代后,您都会覆盖dataDict,并插入未被覆盖的附加列表,从而留下一个附加了所有辅助信息的最终列表。您要做的是初始化for循环的dataDict out端,然后可以将嵌套循环中的字典附加到该列表中: 注:在没有实际数据的情况下进行计算/测试是很困难的,但我相信,如果我在头脑中正确地计算出逻辑,这应该可以做到:
你能提供一个URL作为例子吗?谢谢你,chitown88。这就成功了!对此感到尴尬,但这是一次很好的学习experience@Aldo,别不好意思!这都是一年多前学习的一部分,我根本不知道如何回答这个问题。
import requests
import pandas as pd
from pandas import DataFrame
from bs4 import BeautifulSoup
import datetime as datetime
import json
import time
trackingDomain = ''
domain = ''
cIDs = []
url = "https://" + domain + ""
# Initialize your dictionary
dataDict = dict()
# Initialize your list in your dictionary under key `offers`
dataDict['offers'] = []
print(url)
df = pd.read_csv('campids.csv')
for index, row in df.iterrows():
payload = {'api_key':'',
'campaign_id':'0',
'site_offer_id':row['IDs'],
'source_affiliate_id':'0',
'channel_id':'0',
'account_status_id':'0',
'media_type_id':'0',
'start_at_row':'0',
'row_limit':'0',
'sort_field':'campaign_id',
'sort_descending':'TRUE'
}
print('Campaign Payload', payload)
r = requests.get(url, params=payload)
print(r.status_code)
soup = BeautifulSoup(r.text, 'lxml')
success = soup.find('success').string
# Initialize your list for this iteration/row in your df.iterrows
aIDs = []
for affIDs in soup.select('campaign'):
affID = affIDs.find('source_affiliate_id').string
# Append those affIDs to the aIDs list
aIDs.append(affID)
# Create your dictionary of key:value with key 'affiliate_id' and value the aIDs list
affDict = {'affliate_id':aIDs}
# NOW append that into your list in your dictionary under key `offers`
dataDict['offers'].append(dict(affDict))