Is it reasonable to use None as a dictionary key in Python? Is it reasonable to use None as a dictionary key in Python? python python

Is it reasonable to use None as a dictionary key in Python?


Any hashable value is a valid Python Dictionary Key. For this reason, None is a perfectly valid candidate. There's no confusion when looking for non-existent keys - the presence of None as a key would not affect the ability to check for whether another key was present. Ex:

>>> d = {1: 'a', 2: 'b', None: 'c'}>>> 1 in dTrue>>> 5 in dFalse>>> None in dTrue

There's no conflict, and you can test for it just like normal. It shouldn't cause you a problem. The standard 1-to-1 Key-Value association still exists, so you can't have multiple things in the None key, but using None as a key shouldn't pose a problem by itself.


You want trouble? here we go:

>>> json.loads(json.dumps({None:None})){u'null': None}

So yea, better stay away from json if you do use None as a key. You can patch this by custom (de/)serializer, but I would advise against use of None as a key in the first place.


None is not special in any particular way, it's just another python value. Its only distinction is that it happens to be the return value of a function that doesn't specify any other return value, and it also happens to be a common default value (the default arg of dict.get(), for instance).

You won't cause any run-time conflicts using such a key, but you should ask yourself if that's really a meaningful value to use for a key. It's often more helpful, from the point of view of reading code and understanding what it does, to use a designated instance for special values. Something like:

NoSubContent = SubContentArea(name=None){"contentArea":     {NoSubContent:[standards],      SubContentArea(name="Fruits"): ['apples', 'bananas']}}