該賞金到期in 4天。回答這個問題有資格獲得 50聲望獎勵。 個人希望引起更多關注這個問題:
深入了解執行此操作的最有效方法。我可以深入研究條件,然后迭代以查看條件是否為真,但正在尋找更好的方法,尤其是因為這兩個條件不是彼此的孩子
我在下面有一些 python 代碼,它沿著一棵樹走下去,但我希望它沿著一棵樹走下去,檢查根據值有條件地采取一些路徑。我想LandedPrice根據條件獲取樹的分支和fulfillmentChannel
parsed_results['LowestLanded'] = sku_multi_sku['Summary']['LowestPrices']['LowestPrice']['LandedPrice']['Amount']['value']
這會沿著這棵樹走下去,但是值,因為有兩個LowestPrice記錄/字典為每個condition和fulfillmentChannel 對回傳一個 。我想過濾condition=new,fulfillmentChannel=Amazon所以我只取回一條記錄。當我決議 XML 資料時,我可以使用類似于LowestPrices/LowestPrice[@condition='new'][@fulfillmentChannel='Merchant']/LandedPrice/Amount"但無法在此處使用類似代碼的代碼來完成。我如何用字典做到這一點?
"LowestPrices":{
"value":"\n ",
"LowestPrice":[
{
"value":"\n ",
"condition":{
"value":"new" #condtion new
},
"fulfillmentChannel":{
"value":"Amazon" ## fulfilllmentChannel #1
},
"LandedPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.57"
}
},
"ListingPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.57"
}
},
"Shipping":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"0.00"
}
}
},
{
"value":"\n ",
"condition":{
"value":"new"
},
"fulfillmentChannel":{
"value":"Merchant"
},
"LandedPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.25"
}
},
"ListingPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.25"
}
},
"Shipping":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"0.00"
}
}
}
]
},
uj5u.com熱心網友回復:
您可以將串列推導式與條件邏輯結合使用,如下所示:
my_dict = {
"LowestPrices": {
"value": "\n ",
"LowestPrice": [{
"value": "\n ",
"condition": {
"value": "new"
},
"fulfillmentChannel": {
"value": "Amazon"
},
"LandedPrice": {
"value": "\n ",
"CurrencyCode": {
"value": "USD"
},
"Amount": {
"value": "19.57"
}
},
"ListingPrice": {
"value": "\n ",
"CurrencyCode": {
"value": "USD"
},
"Amount": {
"value": "19.57"
}
},
"Shipping": {
"value": "\n ",
"CurrencyCode": {
"value": "USD"
},
"Amount": {
"value": "0.00"
}
}
},
{
"value": "\n ",
"condition": {
"value": "new"
},
"fulfillmentChannel": {
"value": "Merchant"
},
"LandedPrice": {
"value": "\n ",
"CurrencyCode": {
"value": "USD"
},
"Amount": {
"value": "19.25"
}
},
"ListingPrice": {
"value": "\n ",
"CurrencyCode": {
"value": "USD"
},
"Amount": {
"value": "19.25"
}
},
"Shipping": {
"value": "\n ",
"CurrencyCode": {
"value": "USD"
},
"Amount": {
"value": "0.00"
}
}
}
]
},
}
lowest_prices = [x for x in my_dict["LowestPrices"]["LowestPrice"] if
x["condition"]["value"] == "new"
and x["fulfillmentChannel"]["value"] == "Amazon"]
lowest_prices是滿足所需條件的所有字典的串列。如果您確定您的案例中只有一本字典滿足條件,或者您只想獲得第一個字典的數量,則只需執行以下操作:
if len(lowest_prices) > 0:
amount = lowest_prices[0]["LandedPrice"]["Amount"]["value"]
print(amount)
uj5u.com熱心網友回復:
您可以在串列上回圈并檢查條件。
dic = {
"LowestPrices":{
"value":"\n ",
"LowestPrice":[
{
"value":"\n ",
"condition":{
"value":"new" #condtion new
},
"fulfillmentChannel":{
"value":"Amazon" ## fulfilllmentChannel #1
},
"LandedPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.57"
}
},
"ListingPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.57"
}
},
"Shipping":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"0.00"
}
}
},
{
"value":"\n ",
"condition":{
"value":"new"
},
"fulfillmentChannel":{
"value":"Merchant"
},
"LandedPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.25"
}
},
"ListingPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.25"
}
},
"Shipping":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"0.00"
}
}
}
]
}
}
for lp in dic['LowestPrices']['LowestPrice']:
if lp['condition']['value'] == 'new' and lp['fulfillmentChannel']['value'] == 'Amazon':
print(lp['LandedPrice']['Amount']['value'])
# break # If you only want a single entry
輸出
19.57
uj5u.com熱心網友回復:
您的輸入字串可以通過一系列轉換轉換為字典:
- 在前面添加一個 '{' 字符。
- 在末尾附加一個 '}' 字符。
- 使用前兩個步驟的結果字串作為函式的引數,
ast.literal_eval并將回傳值分配給一個變數,例如the_dict.
既然字串已轉換為 Python 字典,那么迭代最低價格串列并選擇所有滿足過濾器要求的到岸價格金額是一件相對簡單的事情。這可以通過串列推導最有效地完成。
所以如果你在一個檔案中有這個輸入字串,例如test.txt,代碼就是:
import ast
with open('test.txt') as f:
s = f.read()
s = '{' s '}'
the_dict = ast.literal_eval(s)
# The list of lowest prices:
lowest_prices = the_dict['LowestPrices']['LowestPrice']
# List comprehension to filter landed_prices:
landed_prices = [lowest_price['LandedPrice']['Amount']['value']
for lowest_price in lowest_prices
if lowest_price['condition']['value'] == 'new' and
lowest_price['fulfillmentChannel']['value'] == 'Amazon'
]
print(landed_prices)
印刷:
['19.57']
似乎只有一個到岸價格符合過濾條件。
如果您想直接在程式中輸入字串,則必須輸入多行原始字串文字,以便轉義序列 '\n' 不會被解釋為單個換行符,而是被解釋為兩個單獨的字符,即 '\ ' 后跟 'n'。當ast.literal_eval評估這個兩個字符的序列時,它們將被解釋為換行符。
import ast
s = r'''"LowestPrices":{
"value":"\n ",
"LowestPrice":[
{
"value":"\n ",
"condition":{
"value":"new" #condtion new
},
"fulfillmentChannel":{
"value":"Amazon" ## fulfilllmentChannel #1
},
"LandedPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.57"
}
},
"ListingPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.57"
}
},
"Shipping":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"0.00"
}
}
},
{
"value":"\n ",
"condition":{
"value":"new"
},
"fulfillmentChannel":{
"value":"Merchant"
},
"LandedPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.25"
}
},
"ListingPrice":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"19.25"
}
},
"Shipping":{
"value":"\n ",
"CurrencyCode":{
"value":"USD"
},
"Amount":{
"value":"0.00"
}
}
}
]
},'''
s = '{' s '}'
the_dict = ast.literal_eval(s)
# The list of lowest prices:
lowest_prices = the_dict['LowestPrices']['LowestPrice']
# List comprehension to filter landed_prices:
landed_prices = [lowest_price['LandedPrice']['Amount']['value']
for lowest_price in lowest_prices
if lowest_price['condition']['value'] == 'new' and
lowest_price['fulfillmentChannel']['value'] == 'Amazon'
]
print(landed_prices)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/404590.html
標籤:
上一篇:帶有繪圖蟒蛇的西班牙地圖
