是否有一个内置函数可以比较字典的值,比如内置的all()
函数可以比较一个列表或元组,并返回True
或False
+字典键?你知道吗
我想要实现的是给all()
函数一个字典而不是一个列表。all()
的默认行为是返回True
,如果缺少元素或元素错误:
>>> all([1,2,3,4,0])
False
>>> all(['hello', 'world', ''])
False
>>> all(['hello', 'world', None])
False
>>> all([1,2,3,4])
True
>>> all(['hello', 'world'])
True
使用vanilla all()
函数,它只返回True
的False
值,如果我想检查这些布尔值,就可以进行比较。但是,我无法知道哪些值是错误的,以便告诉用户出现问题的原因。你知道吗
我已经创建了一个函数,这个函数就是这个函数。除布尔值外,它还返回值为false的元素键:
# dictionary all function (working with 3.x)
def dict_all(iterable):
for key in iterable:
if not iterable[key]:
return False, key
return True
我希望它早点退出,我们不需要测试所有的值。你知道吗
有没有一个内置的函数可以做到这一点?如果没有,为什么不呢?它似乎在各种情况下都很有用。你知道吗
我将它用于一个函数,其中每个关键字参数都有一个默认值None
,以便在用户未设置值时提供默认值。我使用dict_all()
函数在返回False, key
时提供错误消息。你知道吗
例如:
dictionary = {'jira_key' : 'REDACTED',
'summary' : 'this is a test',
'desc' : 'this is a description',
'req_type' : 'PMV',
'comp_type' : None}
预期结果是回报False, 'comp_type'
同样对于那些驳斥True
和False
作为元组返回的有用性的人,我给你举个例子:
>>> example = dict_all(iterable)
#if iterable is the example dictionary above
#the result would be
>>> print(example)
(False, 'comp_type')
#which means
#example[0] is a Truthy or Falsey for the value in the key
#they key is example[1]
编辑:这个答案是在您编辑它之前在原始
dict_all
函数的上下文中编写的。你知道吗我有三点意见。你知道吗
首先,我不确定您是否意识到它,所以我要指出:您的
dict_all
查找falsy值,而字典是其键上的iterable。你知道吗其次,函数中的
enumerate
似乎毫无意义。考虑以下生成器表达式。你知道吗第三,得到实际的falsy值不是比仅仅得到
False
更有用吗?在这种情况下,在上面的表达式中使用(value, key)
而不是(False, key)
。你知道吗编辑:因为您需要一个库函数,所以可以使用
itertools.dropwhile
删除带有truthy值的字典项。你知道吗这将为您提供一个(key,value)对和一个falsy值或
None
。你知道吗您所需要做的就是迭代键值对,这样就可以测试值而不必再次引用原始映射,并且在值为false时返回键值。您还需要在返回类型中保持一致,并在两种情况下都返回一个元组:
注意最后一行的更改,您确实不希望为false返回一个tuple,为true返回一个boolean,因为这样您还必须测试返回类型,才能真正知道缺少了什么。你知道吗
对于这个问题没有“内置”函数,因为
all()
(和any()
)的设计纯粹是为了对这个问题产生一个yes或no的答案:iterable的所有元素都通过了测试吗。你知道吗你问的是不同的问题;你的代码需要知道测试失败的第一个关键是什么。你知道吗
对于这个问题,我将使用^{} function ,带有一个生成器表达式和一个默认值:
在这里不需要返回
True
或False
;我们检测到在选取默认案例时没有键未通过测试,我们用empty is not None
的测试替换了True
或False
值。你知道吗任何唯一的sentinel都可以;
None
是通常的选择,但是如果您的输入字典将None
用作有效键,则可以使用object()
:相关问题 更多 >
编程相关推荐