当前位置: 首页 > 面试题库 >

仅在满足条件的情况下添加到dict

鲜于华容
2023-03-14
问题内容

我正在使用urllib.urlencode构建Web POST参数的方法,但是有一些值仅None在它们不存在的情况下才想添加。

apple = 'green'
orange = 'orange'
params = urllib.urlencode({
    'apple': apple,
    'orange': orange
})

效果很好,但是如果我将orange变量设为可选,如何防止将其添加到参数中?像这样的东西(伪代码):

apple = 'green'
orange = None
params = urllib.urlencode({
    'apple': apple,
    if orange: 'orange': orange
})

我希望这已经足够清楚了,有人知道如何解决吗?


问题答案:

创建初始字母后,您必须单独添加密钥dict

params = {'apple': apple}
if orange is not None:
    params['orange'] = orange
params = urllib.urlencode(params)

Python没有语法将键定义为条件键;如果您已经按顺序拥有所有内容,则可以使用dict理解:

params = urllib.urlencode({k: v for k, v in (('orange', orange), ('apple', apple)) if v is not None})

但这不是很可读。

另一个选择是使用字典拆包,但是对于单个键来说,可读性不是那么高:

params = urllib.urlencode({
    'apple': apple,
    **({'orange': orange} if orange is not None else {})
})

我个人永远不会使用它,因为它太hacky了,而且不如使用单独的语句那么明确和
清晰if。正如Python的禅宗所言:
可读性至关重要。



 类似资料:
  • 这周我刚刚开始学习C#并且正在尝试运行一个简单的代码,当用户输入文本时,它会提示用户输入一个数字,或者当用户输入一个负数时,它会提示用户输入一个正数(因此,对于文本是一个布尔运算,对于负数是一个if语句)。如果他们输入了一个有效的(正)数字,程序将继续进行其余的步骤。 然而,在此代码中,如果用户输入一个负数,然后输入一个文本,然后输入另一个负数,依此类推,似乎会中断循环并继续下一个操作。 代码是一

  • 问题内容: 我正在研究分配液体的应用程序。这是数据库的组织 罐: canister_id {PK} Ingredient_id {FK} 成分: Ingredient_id {PK} 成分名称 喝: Drink_id {PK} 饮料名称 成分: instance_id {PK} Drink_id {FK} Ingredient_id {FK} 数量 每种饮料都有多种成分(保存在Ingredient

  • 问题内容: 我有一个数组,当对象被修改时,我会将对象推送到该数组。如果用户按下,那么我将遍历并为他们应用适当的API调用。 如果API调用成功完成,我想从中删除该项目,否则将其保留在内部并通知用户某些项目未成功保存。我目前有这个(在AngularJS中) 有更好的方法吗? 问题答案: 您已经在使用诺言,您可能希望端到端地兑现。另外,您过早地兑现了承诺。 假设您不愿自我证明自己处于次优状态,那么您仍

  • 问题内容: 是否可以在MySQL中执行UPDATE查询,仅在满足特定条件时才更新字段值?像这样: 换一种说法: 正确的方法是什么? 问题答案: 是! 这里有另一个例子: 之所以可行,是因为MySQL不会更新该行(如果没有更改),如docs中所述: 如果将列设置为其当前值,MySQL会注意到这一点,并且不会对其进行更新。

  • 是否有可能在matplotlib中添加一个条目到图例中而不绘制相应的对象? 例如,我在一个图形上绘制了两组三条线。它们成对出现,所以我想用相应的颜色绘制它们,其中一个是虚线,另一个是实线。 但是,与图例中的所有六个项目不同,(纯蓝色1、纯橙色2、纯绿色3、纯蓝色1、纯橙色2、纯绿色3),我希望有三个项目(纯蓝色1、纯橙色2、纯绿色3),然后有两个额外的项目来消除虚线与实线之间的歧义(纯黑色“正片”

  • 所以我必须在eclipse中为我的类创建一个java项目。分配是创建一个程序,允许用户在程序中输入整数,直到输入某个整数(42)。输入整数(42)后,程序将为1。平均输入的所有数字。2、显示输入的最小值和最大值。3、输入的数字总数。这些必须在不计算(42)的情况下进行计算。这就是我目前所拥有的。我可以从用户那里获得输入,一旦他们输入42,程序就会停止并显示总数,但包括42。我不知道如何为输入添加一