我正在嘗試使用 Python 決議來自 API 請求的多個 JSON 回應(下面是一個示例,但我有一個包含數百個這些 JSON 回應的串列)。我正在尋找使用"dealID", "companyName", and "dealSize": "amount"
鍵中的值創建一個字典。
我能夠成功創建一個字典,其中包含來自上面前 3 個鍵的值,但不是嵌套的"amount"
. 我遇到的問題是"amount"
有時沒有價值。為了解決這個問題,我創建了一個將 none 值替換為默認值的函式。但是現在當我嘗試創建字典時,我收到了錯誤訊息"TypeError: string indices must be integers"
。感謝任何建議。我似乎已經嘗試了一切。
[{
"dealId": "330843-24T",
"dealNumber": 1,
"companyId": "62224",
"companyName": "Company A",
"dealDate": "2014-04-16",
"dealSize": {
"amount": 1500000.0,
"currency": "USD",
"nativeAmount": 1500000.0,
"nativeCurrency": "USD",
"estimated": false
},
"dealSizeStatus": "Actual",
"dealStatus": {
"code": "COMP",
"description": "Completed"
},
"percentAcquired": "None",
"raisedToDate": {
"amount": 1500000.0,
"currency": "USD",
"nativeAmount": 1500000.0,
"nativeCurrency": "USD",
"estimated": false
},
"vcRound": "1st Round",
"vcRoundUpDownFlat": "None",
"totalInvestedCapital": {
"amount": 1500000.0,
"currency": "USD",
"nativeAmount": 1500000.0,
"nativeCurrency": "USD",
"estimated": false
},
"investorOwnership": "None",
"stockSplit": "None",
"dealType1": {
"code": "Seed",
"description": "Seed Round"
},
"dealType2": "None",
"dealType3": "None",
"dealClass": {
"code": "VC",
"description": "Venture Capital"
},
"dealSynopsis": "The company raised $1.5 million of seed funding",
"totalInvestedEquity": {
"amount": 300000.0,
"currency": "USD",
"nativeAmount": 300000.0,
"nativeCurrency": "USD",
"estimated": false
},
"debtType1": "None",
"debtType2": "None",
"debtType3": "None",
"debtAmount1": {
"amount": 1200000.0,
"currency": "USD",
"nativeAmount": 1200000.0,
"nativeCurrency": "USD",
"estimated": false
},
"debtAmount2": "None",
"debtAmount3": "None",
"debtRaisedInRound": {
"amount": 1200000.0,
"currency": "USD",
"nativeAmount": 1200000.0,
"nativeCurrency": "USD",
"estimated": false
},
"contingentPayout": "None",
"valuationAvailable": true,
"capTableAvailable": false,
"trancheInfoAvailable": false,
"debtLenderInfoAvailable": true
}, {
"dealId": "4053346-57T",
"dealNumber": 3,
"companyId": "624245-02",
"companyName": "Company A",
"dealDate": "2017-02-27",
"dealSize": {
"amount": 2800000.0,
"currency": "USD",
"nativeAmount": 2800000.0,
"nativeCurrency": "USD",
"estimated": false
},
"dealSizeStatus": "Actual",
"dealStatus": {
"code": "COMP",
"description": "Completed"
},
"percentAcquired": "None",
"raisedToDate": {
"amount": 14298988.0,
"currency": "USD",
"nativeAmount": 14298988.0,
"nativeCurrency": "USD",
"estimated": false
},
"vcRound": "3rd Round",
"vcRoundUpDownFlat": "None",
"totalInvestedCapital": {
"amount": 2800000.0,
"currency": "USD",
"nativeAmount": 2800000.0,
"nativeCurrency": "USD",
"estimated": false
},
"investorOwnership": "None",
"stockSplit": "None",
"dealType1": {
"code": "EVC",
"description": "Early Stage VC"
},
"dealType2": {
"code": "A1",
"description": "Series A1"
},
"dealType3": "None",
"dealClass": {
"code": "VC",
"description": "Venture Capital"
},
"dealSynopsis": "The company raised $2.8 million",
"totalInvestedEquity": {
"amount": 2800000.0,
"currency": "USD",
"nativeAmount": 2800000.0,
"nativeCurrency": "USD",
"estimated": false
},
"debtType1": "None",
"debtType2": "None",
"debtType3": "None",
"debtAmount1": "None",
"debtAmount2": "None",
"debtAmount3": "None",
"debtRaisedInRound": "None",
"contingentPayout": "None",
"valuationAvailable": false,
"capTableAvailable": false,
"trancheInfoAvailable": false,
"debtLenderInfoAvailable": false
},
這是我用來替換包含 JSON 回應的原始串列(稱為 dealinfo)中的 none 值的函式
def replace_none_in_ddict(dealinfo):
replacement = "0"
return {k: v if v is not None else replacement for k, v in dealinfo}
json_str = json.dumps(dealinfo)
dealinfo2 = json.loads(json_str, object_pairs_hook=replace_none_in_ddict)
dealinfo3 = json.dumps(dealinfo2)
這是我嘗試創建一個導致字串 TypeError 的字典。dealinfo3
包含將無值替換為 0 的 JSON 回應。
elements = []
for data in dealinfo3:
dealdata = {
"DealID" : data["dealId"],
"Deal_Size": data["dealSize"]["amount"],
"CompanyID" : data["companyId"],
}
elements.append(dealdata)
uj5u.com熱心網友回復:
我創建了一個最小的輸入資料示例,如下所示:
input_data = [
{
"dealId": "330843-24T",
"companyName": "Company A",
"dealSize": {
"amount": 1500000.0,
}},
{
"dealId": "4053346-57T",
"companyName": "Company A",
"dealSize": {
"amount": None,
}
}]
你想如何替換你的 None 值?在此解決方案中,如果金額為 None,則 dealSize 設定為 0。如果我的假設是錯誤的,請隨時提出任何問題或糾正我:)
output = [{"dealId": deal.get("dealId"),
"companyName": deal.get("companyName"),
"dealSize": deal.get("dealSize", {}).get("amount") or 0} for deal in input_data]
輸出:
[{'dealId': '330843-24T', 'companyName': 'Company A', 'dealSize': 1500000.0},
{'dealId': '4053346-57T', 'companyName': 'Company A', 'dealSize': 0}]
編輯:復制/粘貼
input_data = [
{
"dealId": "330843-24T",
"companyName": "Company A",
"dealSize": {
"amount": 1500000.0,
}},
{
"dealId": "4053346-57T",
"companyName": "Company A",
"dealSize": {
"amount": None,
}
}]
output = [{"dealId": deal.get("dealId"),
"companyName": deal.get("companyName"),
"dealSize": deal.get("dealSize", {}).get("amount") or 0} for deal in input_data]
uj5u.com熱心網友回復:
我不確定你想要的輸出。
如果輸出是這樣的:
[{'dealID': '330843-24T', 'companyName': 'Company A', 'dealSize': 1500000.0}, {'dealID': '4053346-57T', 'companyName': 'Company A', 'dealSize ':2800000.0}]
所以代碼是這樣的:
keys_needed = ['dealID', 'companyName', 'dealSize']
grand_dict = []
for i, d in enumerate(data):
i = {'dealID': '',
'companyName': '',
'dealSize': ''}
i['dealID'] = d.get('dealId')
i['companyName'] = d.get('companyName')
i['dealSize'] = d.get('dealSize') and d.get('dealSize').get('amount')
grand_dict.append(i)
print (grand_dict)
uj5u.com熱心網友回復:
串列中有“[”,這個json是什么意思。您需要修改每個元素:
for my_json in some_json:
print(my_json['argument'])
例子:
response = r.get(url)
response_text = json.loads(response.text)
for responce_json in responce_text:
lat = responce_json['lat']
lon = responce_json['lon']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512195.html