在Python中处理未声明的dict键

在Python中处理未声明的dict键,python,exception,exception-handling,Python,Exception,Exception Handling,在我的Ruby应用程序中,我有一个哈希表: c={:sample=>1,:other=>2} 我可以这样处理桌子: [c[:sample].nil?,c[:另一个].nil?,c[:不在列表中].nil?] 我正试图用Python做同样的事情。我创建了一本新词典: c = {"sample":1, "another":2} 我无法处理以下项的零值异常: c["not-in-dictionary"] 我试过这个: c[:not_in_dictionery] is not None 它返回

在我的Ruby应用程序中,我有一个哈希表:

c={:sample=>1,:other=>2}
我可以这样处理桌子:

[c[:sample].nil?,c[:另一个].nil?,c[:不在列表中].nil?]
我正试图用Python做同样的事情。我创建了一本新词典:

c = {"sample":1, "another":2}
我无法处理以下项的零值异常:

c["not-in-dictionary"]
我试过这个:

c[:not_in_dictionery] is not None

它返回的是一个异常,而不是
False。
如何处理此问题?

在您的特定情况下,您可能应该这样做,而不是与
无进行比较:

"not_in_dictionary" in c
如果您确实在使用此代码,它将不起作用:

c[:not_in_dictionary] is not None
Python没有专门的
关键字作为字典键;而是使用普通字符串


Python中的常见行为是在请求缺少密钥时引发异常,并让您处理该异常

d={“a”:2,“c”:3}
尝试:
打印d[“b”]
除KeyError外:
打印“我们的字典里没有b!”
如果要获取
None
如果缺少值,可以使用
dict
.get
方法在缺少键时返回值(
None

打印d.get(“a”)#打印2 打印d.get(“b”)#不打印任何内容 打印d.get(“b”,0)#打印0
要仅检查某个键在
dict
中是否有值,请使用
中的
不在
关键字

用d#True打印“a”
在d#False中打印“b”
打印“c”而不是d#假
打印“d”不是d#True

Python包含一个模块,允许您定义在正常使用时返回默认值而不是错误的字典:。您可以这样使用它:

导入集合
d=collections.defaultdict(lambda:None)
在d#False中打印“b”
打印d[“b”]#无
打印d[“b”]==无#真
用d#True打印“b”

请注意
中的
的混乱行为。当您第一次查找一个键时,它会将其添加到指向默认值的位置,因此现在在
dict

中它被认为是
d.get(“a”,无)
是,umh,过度指定的。它相当于
d.get(“a”)
。默认值只需要第二个参数(而不是
None
,可以说这是默认值)。也许defaultdict也值得一提。@Jeremy Banks谢谢。我还需要一个答案。如果变量存在,我想返回True?。有什么办法吗?@shajin那只是d中的“变量”
!:)@杰里米·班克斯:我们怎样才能写出与dist相反的contains?比如“if'False'不包含在dist中”。我尝试了if!dist.uuu包含uuu(“假”)。生成错误:)