6

私は動物園の動物の辞書を持っています。ネストされた辞書の辞書に入れたいのですが、その特定の種が辞書に追加されていないため、KeyError が発生します。

def add_to_world(self, species, name, zone = 'retreat'):
    self.object_attr[species][name] = {'zone' : zone}

その種が辞書にあるかどうかを確認し、そうでない場合は作成するショートカットはありますか、それとも長い道のりをして、その種が追加されたかどうかを手動で確認する必要がありますか?

4

3 に答える 3

14
def add_to_world(self, species, name, zone = 'retreat'):
    self.object_attr.setdefault(species, {})[name] = {'zone' : zone}
于 2012-06-01T01:57:22.610 に答える
11

ディクショナリを値として defaultdict を使用する例を次に示します。

>>> from collections import defaultdict
>>> d = defaultdict(dict)
>>> d["species"]["name"] = {"zone": "1"}
>>> d
defaultdict(<type 'dict'>, {'species': {'name': {'zone': '1'}}})
>>>

さらにネストしたい場合は、defaultdict(dict)を返す関数を作成する必要があります。

def nested_defaultdict():
    return defaultdict(dict)

# Then you can use a dictionary nested to 3 levels
d2 = defaultdict(nested_defaultdict)
d2["species"]["name"]["zone"] = 1
于 2012-06-01T01:59:40.517 に答える
9

ディクショナリ値の自動有効化は、 によって実行できますcollections.defaultdict

于 2012-06-01T01:55:32.400 に答える