Handle undeclared dict key in Python

前端 未结 1 1930
深忆病人
深忆病人 2021-02-07 05:30

In my Ruby application I have a hash table:

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

I can handle the tabl

1条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2021-02-07 06:01

    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.

    0 讨论(0)
提交回复
热议问题