【问题标题】:Python3, building nested dictionaryPython3,构建嵌套字典
【发布时间】:2021-01-01 11:55:03
【问题描述】:

我是 Python 新手,来自 Perl,我经常使用这样的东西:

#!/usr/bin/env perl
  
my %d;
my $a = 12; $b = 14; $c = 16;

$d{$a}{$b}{$c} = 42;

print($d{$a}{$b}{$c});  # 42

如何在 python 中填充字典,例如在一个循环中

如果我用 Python 试试这个,我得到了一个 KeyError

a = 12
b = 14
c = 16

my_dict[a][b][c] = 42  # KeyError

这是唯一的方法吗?

if a in my_dict:
    if b in my_dict[a]:
        my_dict[a][b][c] = 42
    else:
        my_dict[a][b] = {}
        my_dict[a][b][c] = 42
else:
    my_dict[a] = {}
    my_dict[a][b] = {}
    my_dict[a][b][c] = 42

【问题讨论】:

标签: python python-3.x dictionary nested


【解决方案1】:

您可以使用dict.setdefault(key, default_value)

my_dict = {}
my_dict.setdefault(a, {}).setdefault(b, {}).setdefault(c, 42)
print(my_dict)  # {12: {14: {16: 42}}}

my_dict = {a: {}}
my_dict.setdefault(a, {}).setdefault(b, {}).setdefault(c, 42)
print(my_dict)  # {12: {14: {16: 42}}}

my_dict = {a: {b: {}}}
my_dict.setdefault(a, {}).setdefault(b, {}).setdefault(c, 42)
print(my_dict)  # {12: {14: {16: 42}}}

【讨论】:

    【解决方案2】:

    对于这个特定的用例,实际上最好使用默认字典(它是一个嵌套的默认字典,灵感来自this answer):

    from collections import defaultdict 
    
    def nested_dict():
        return defaultdict(nested_dict)
    
    my_dict = defaultdict(nested_dict)
    
    a = 12
    b = 14
    c = 16
    
    my_dict[a][b][c] = 42  # no KeyError
    my_dict[a][b][c] 
    >>> 42
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 1970-01-01
      • 2018-09-12
      • 2017-02-16
      • 1970-01-01
      • 2020-03-13
      • 2021-06-21
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多