python - 函数在python 2.7中执行dictionary.get中的键是否存在
问题描述
我正在使用 Python 中的字典,并且正在使用以下方法搜索值:
my_dictionary_object.get("key")
众所周知,如果字典中缺少键,它将返回None
对象。因此,为了节省额外的行并使我的代码更有趣,我正在尝试:
def my_function():
'''do some calculations'''
return missing_value_from_dictionary
现在这是有趣的部分;当我做
my_dictionary_object.get("key", my_function())
无论钥匙是否丢失,它都会执行该功能,所以我想让我们删除括号,我做了:
my_dictionary_object.get("key", my_function)
和(以防万一)
my_dictionary_object.get("key", lambda: my_function())
但是没有 lambda 的那个没有执行(因为它从未被调用过)同样发生在有 lambda 的那个上。
TL;博士
我的问题是,如果字典中存在密钥,为什么要执行该函数?
是我做错了什么还是我在这里遗漏了什么?
解决方案
在:my_dictionary_object.get("key", my_function())
执行看起来像:
- 评估第一个参数(“key”)
- 评估作为表达式的第二个参数:
my_function()
. 因此,让我们调用该函数,并使用返回值代替它。非常类似于:a = my_function()
,python 会调用该函数并将返回的值放在它的位置。 mydictionary_object.get(..)
使用上述两个评估参数调用。
换句话说,dictionary.get("key", default)
如果键不存在,将简单地返回第二个参数。如果是 lambda,则返回 lambda。lambda 是一个对象。请注意, in .get("key", my_function())
,my_function()
在技术上不是第二个参数。作为执行该函数的结果返回的结果值是第二个参数——它解释了你错在哪里,希望如此。
您要查找的内容实际上是在另一个名为defaultdict
.
你要做的是:
from collections import defaultdict
my_dictionary_object = defaultdict(my_function) # my_function should not take any argument.
my_dictionary_object["non-existing-key"] # Magic happens, see below.
发生的情况是,如果键 (=x) 不存在,my_function
则在没有任何参数的情况下调用字典,并使用函数针对键 (=x) 返回的值更新字典。就像是:
if "key" not in dictionary:
dictionary["key"] = my_function()
return dictionary["key"]
推荐阅读
- c++ - gcc 7.4.0 的奇怪 std::atof 错误
- php - Laravel - 如何在我的 Laravel 代码中从 json 中提取值
- python - 期望用双引号括起来的属性名称
- android - Flutter:构建 APK 后,来自 API 的数据不会出现
- php - Wordpress:从自定义帖子类型中删除帖子时更改消息
- python - 在 python seaborn 中将 STD 添加到图例
- asp.net-core - IQueryable with Where contains a list throws "No mapping to a relationship can be found for the CLR type'List
’。” - css - 使用 Unicode 将 Ui-Grid 图标与 Font-awesome 交换
- hadoop - hadoop 及其技术设置
- google-sheets - 如何对字符串的过滤功能进行排序