【发布时间】:2020-09-05 14:45:52
【问题描述】:
我想构建一个字典,但只有当项目的值为真时才添加项目
我做以下事情
my_dict = {
"key1": convert_value("foo"),
"key2": convert_value(None),
"key3": convert_value(""),
"key4": "bar",
"key5": ""
}
问题是,我根本不希望键在字典中,如果它的 convert_value() 是假的,例如 key2 和 key3,在使用 convert_value() 函数转换后它们都是空字符串。
生成的字典将如下所示
{
"key1": "foo",
"key2": "",
"key3": "",
"key4": "bar",
"key5": ""
}
但是我希望得到的 dict 就是这个
{
"key1": "foo",
"key4": "bar",
"key5": "",
}
没有在转换后返回空值的 keys2 和 3。有什么办法可以直接在施工期间进行吗?
我不能使用 dict 理解,因为并非所有值在添加之前都经过 convert_value 函数(这些键可以有空值),事后删除它们似乎很浪费
编辑: 我真正要寻找的类似于提供如下默认值
"key2": convert_value("foo") or "default",
但不是使用默认值,而是完全删除/跳过此键。那将是完美的。
【问题讨论】:
-
能否使用 dic 理解,并使用中间函数在需要时调用 convert_value() 或在不需要 convert_value 时返回相同的值?
-
您能否提供
convert_value函数的示例版本?一些上下文也可能有帮助 - 比如你为什么使用空字符串而不是说,一个哨兵object? -
@SergioFerrerSánchez 不,说实话,这是一长串非常不同的项目。其中一些使用 convert_value 函数,其他使用来自另一个 dict 的 .pop,或者通过 strftime 进行转换。不幸的是,这一切都非常特殊。我正在专门寻找可以跳过没有价值的键的东西 - 根据具体情况。
-
@wjandrea 当然,一些上下文可能会有所帮助。我主要使用它来转换日期时间,然后将它们发送到 api。遗憾的是,API 接收者不会接受空字符串——如果存在键“日期”。但是,如果“日期”字段完全丢失,它将接受请求。发送带有“日期”字段但“空字符串”作为其值的字段将被拒绝。我从数据库查询加载我的数据 - 即使它是空的,它也将始终返回该字段。如果此步骤中的值为空,我必须跳过这些键。 date 只是一个例子,许多其他的工作类似。
-
@c89 哦,所以关键很重要?很高兴知道!我之前在想,你不能过滤你当前的结果,因为你只会查看值并且两个空字符串是相同的,但是如果键很重要,这给了你一种过滤它的方法!
标签: python-3.x dictionary