Handle undeclared dict key in Python

旧巷老猫 提交于 2019-12-20 17:35:40

问题


In my Ruby application I have a hash table:

c = {:sample => 1,:another => 2}

I can handle the table like this:

[c[:sample].nil? , c[:another].nil? ,c[:not_in_list].nil?]

I'm trying to do the same thing in Python. I created a new dictionary:

c = {"sample":1, "another":2}

I couldn't handle the nil value exception for:

c["not-in-dictionary"]

I tried this:

c[:not_in_dictionery] is not None

and it is returning an exception instead of False. How do I handle this?


回答1:


In your particular case, you should probably do this instead of comparing with None:

"not_in_dictionary" in c

If you were literally using this code, it will not work:

c[:not_in_dictionary] is not None

Python doesn't have special :keywords for dictionary keys; ordinary strings are used instead.


The ordinary behaviour in Python is to raise an exception when you request a missing key, and let you handle the exception.

d = {"a": 2, "c": 3}

try:
    print d["b"]
except KeyError:
    print "There is no b in our dict!"

If you want to get None if a value is missing you can use the dict's .get method to return a value (None by default) if the key is missing.

print d.get("a") # prints 2
print d.get("b") # prints None
print d.get("b", 0) # prints 0

To just check if a key has a value in a dict, use the in or not in keywords.

print "a" in d # True
print "b" in d # False
print "c" not in d # False
print "d" not in d # True

Python includes a module that allows you to define dictionaries that return a default value instead of an error when used normally: collections.defaultdict. You could use it like this:

import collections

d = collections.defaultdict(lambda: None)
print "b" in d # False
print d["b"] # None
print d["b"] == None # True
print "b" in d # True

Notice the confusing behaviour with in. When you look up a key for the first time, it adds it pointing to the default value, so it's now considered to be in the dict.



来源:https://stackoverflow.com/questions/6755655/handle-undeclared-dict-key-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!