56532


python3で多重レベルの辞書の値を出力したい場合、get()で存在確認する(No.1)、inで存在確認(No.2)するとネストが深くなってしまうのですが、より簡潔に書くにはどうしたらよいでしょうか？また、No.1、No.2の使い分けはどうしたらいいでしょうか？

[code]

    cats = [
        "Henri",
        "Grumpy",
        "Lucy",
    ]
    animals = {
        "cats": cats,
        "octopi": {},
        "emus": {},
    }
    life = {
        "animals": animals,
        "plants": {},
        "other": {},
    }
    
    # No.1
    if life.get("animals") != None:
        if life.get("animals").get("cats") != None:
            print(life.get("animals").get("cats"))
    
    # No.2
    if "animals" in life:
        if "cats" in life["animals"]:
            print(life["animals"]["cats"])
    
[/code]


CC BY-SA 4.0
2019-07-10T00:51:42.610
56531
2019-07-10T01:31:02.710
2019-07-10T01:06:53.163
19297
19297
question
python python3
python3で辞書のkeyの値を出力したい


getはデフォルトの返答を第二引数を渡せるため、以下の書き方ができます。

[code]

    # no.1 
    animals = life.get("animals", {})  # もしanimalsが無い場合は空辞書が返される
    cats = animals.get("cats")  # もし上で空辞書が返った場合、catsも無いのでNoneが返される
    if cats is not None:
        print(cats)
    
    # つなげると
    cats = life.get("animals", {}).get("cats")
    if cats is not None:
        print(cats)
    
[/code]


CC BY-SA 4.0
2019-07-10T01:31:02.710
56532
2019-07-10T01:31:02.710
26558
56531
answer