我有以下資料樣式,即字串串列:
fruits_lst = ['Apple:Good','Banana:Off','Orange:Excellent','Blueberry:Excellent','Raspberry:Good']
我希望通過在一行代碼中的理解來實作這個結果:
{'APPLE:GOOD': 'Ripe',
'BLUEBERRY:EXCELLENT': 'Ripe',
'Banana:Off': 'Off',
'ORANGE:EXCELLENT': 'Ripe',
'RASPBERRY:GOOD': 'Ripe'}
這個結果是通過部署以下回圈方法實作的:
fruits_dict = {}
for fruit in fruits_lst:
if fruit.split(':')[1] != 'Off':
fruits_dict[fruit.upper()] = 'Ripe'
else:
fruits_dict[fruit.lower()] = 'Off'
所以這會創建一個字典,但還需要執行不同的函式來根據fruit.split(':')[1] 值生成所需的鍵。
我一直在嘗試重新撰寫它,以便通過在一行代碼中的理解來實作相同的結果,但我仍在試圖找出要部署的語法以實作此結果。
我嘗試過:
{fruit.upper():'Ripe' for fruit in fruits_lst if fruit.split(':') != 'Off' else fruit.lower():'Off'}
{fruit.upper():'Ripe' if fruit.split(':') != 'Off' else fruit.lower():'Off' for fruit in fruits_lst}
但是,這些都回傳一個 SyntaxError。
我注意到這會產生成熟水果的字典,但我顯然錯過了不成熟的水果:
{fruit.upper():'Ripe' for fruit in fruits_lst if fruit.split(':') != 'Off'}
{'APPLE:GOOD': 'Ripe',
'BANANA:OFF': 'Ripe',
'BLUEBERRY:EXCELLENT': 'Ripe',
'ORANGE:EXCELLENT': 'Ripe',
'RASPBERRY:GOOD': 'Ripe'}
我在這里尋找正確的語法,但為了更好地理解我在如何通過帶有 if else 條件的理解方法生成字典時應該在這種情況下撰寫時缺少什么。
謝謝!
這個問題現在更新了更具體的細節。謝謝!
uj5u.com熱心網友回復:
一種選擇是OR在生成器運算式中使用并使用 dict 建構式:
out = dict((fruit.upper(),'Ripe') * (fruit.split(':')[1]!='Off') or (fruit,'Off') for fruit in fruits_lst)
或者簡單地在生成器運算式中實作 if-else 并構造字典:
out = dict((fruit.upper(),'Ripe') if fruit.split(':')[1]!='Off' else (fruit,'Off') for fruit in fruits_lst)
輸出:
{'APPLE:GOOD': 'Ripe',
'Banana:Off': 'Off',
'ORANGE:EXCELLENT': 'Ripe',
'BLUEBERRY:EXCELLENT': 'Ripe',
'RASPBERRY:GOOD': 'Ripe'}
uj5u.com熱心網友回復:
另一個版本:
out = {
fruit: "Off" if fruit.split(":")[1] == "Off" else "Ripe"
for fruit in fruits_lst
}
print(out)
印刷:
{
"Apple:Good": "Ripe",
"Banana:Off": "Off",
"Orange:Excellent": "Ripe",
"Blueberry:Excellent": "Ripe",
"Raspberry:Good": "Ripe",
}
或更短:
out = {
fruit: "Off" if fruit.endswith(":Off") else "Ripe" for fruit in fruits_lst
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/461545.html
標籤:python-3.x 列表 循环 字典 词典理解
