说我有一本字典,并且我想检查一个密钥是否映射到非空值。这样做的一个方法是Len函数:检查字典中的值是否定义/长度为零的最Pythonic方法
mydict = {"key" : "value", "emptykey" : ""}
print "True" if len(mydict["key"]) > 0 else "False" # prints true
print "True" if len(mydict["emptykey"]) > 0 else "False" # prints false
然而,一个可以依靠的Python的语义,以及如何当一个对象被定义它的计算结果为真,离开了LEN电话:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if mydict["key"] else "False" # prints true
print "True" if mydict["emptykey"] else "False" # prints false
但是,我不确定哪个更加Pythonic。第一种认为“明确比隐含更好”,但第二种认为“简单比复杂更好”。
我还想知道,如果不使用len调用可能会咬我,因为我正在使用的字典不一定包含字符串,但可能包含其他可用类型(列表,集合等)。 OTOH,前者(带len调用)如果None被存储为值,则代码将被炸毁,而非len版本将按预期工作(将被评估为false)。
哪个版本更安全,更多Pythonic?
编辑:澄清假设:我知道关键是在字典中,我知道值是可以lenable的。我也无法避免将零长度值输入词典。
编辑#2:好像人们错过了我的问题。我并不想以确定检查的最Python化/最安全的方式,如果一个关键出现在一本字典,我想检查是否值长度为零或不
..并说:“如果与'key'关联的值评估为True,则执行某些操作” - 但我的意图是说“如果值的长度不是零”。分裂我想的头发。 –
@AdamParkin:嗯。那么,如果你有一个长度不为零的物体仍然被评估为False,那么这将是非常不寻常的......并且可能会被破坏。另一方面,如果你想防范没有长度的对象(比如'int's)作为合法值,那么检查'len(value)'就是你所有的东西。但是,除非你有一个很好的理由(例如数据传输/存储等),否则这是一个坏主意。如果你走这条路线,确保你抓住了'TypeError'。 –