当还需要有条件地修改密钥时,使用 if else 条件部署字典理解的语法?在这个具体的例子中?
Syntax to deploy for a dictionary comprehension with an if else condition, when also needing to conditionally amend the key? in this specific example?
我有以下数据样式,即字符串列表:
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}
然而,这些都是return语法错误。
我注意到这会产生成熟水果的字典,但我显然错过了不成熟的水果:
{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 条件的理解方法生成字典的方法。
谢谢!
问题现在更新了更具体的细节。谢谢!
一种选择是在生成器表达式中使用 OR
并使用字典构造函数:
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'}
另一个版本:
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
}
我有以下数据样式,即字符串列表:
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}
然而,这些都是return语法错误。
我注意到这会产生成熟水果的字典,但我显然错过了不成熟的水果:
{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 条件的理解方法生成字典的方法。
谢谢!
问题现在更新了更具体的细节。谢谢!
一种选择是在生成器表达式中使用 OR
并使用字典构造函数:
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'}
另一个版本:
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
}