【问题标题】:Multi-level dictionary creation [duplicate]多级字典创建[重复]
【发布时间】:2019-03-27 14:41:33
【问题描述】:

样本输入代替separate_function

separate_function = [('primary_1', 'val_1'), ('primary_1', 'val_2'), ('primary_3', 'val_2')] 

预期输出,即my_dictionary

{
    "main": {
        "primary_1": [
            "val_1",
            "val_2"
        ],
        "primary_3": [
            "val_2"
        ]
    }
}

我想创建一个字典,my_dictionary 就像上面一样。

预期输出中有多个键,例如 "main"。为了降低问题的复杂性,我对它进行了硬编码。 有一个生成器函数,我需要对其进行迭代以创建这种格式。再次为简单起见,我将其显示为元组列表。到目前为止我已经尝试过:

from collections import defaultdict
my_dictionary = defaultdict(dict)
for primary_var, value in separate_function:
    my_dictionary['main'][primary_var].append(value)
    # This would have worked if I have expected values as string 
    # rather than a list in that case I can write the above line like this:
    my_dictionary['main'][primary_var] = value

try, except 可以使用,如果KeyError 则先分配,否则附加可以完成,但是,我正在寻找更好的清洁解决方案。请建议。谢谢。

【问题讨论】:

    标签: python json python-2.7 dictionary defaultdict


    【解决方案1】:

    这是使用collections.defaultdict 的一种方法。

    演示:

    from collections import defaultdict
    separate_function = [('primary_1', 'val_1'), ('primary_1', 'val_2'), ('primary_3', 'val_2')] 
    result = defaultdict(list)
    for k, v in separate_function:
        result[k].append(v)
    
    
    my_dictionary = {"main": result}
    print(my_dictionary)
    

    输出:

    {'main': defaultdict(<type 'list'>, {'primary_3': ['val_2'], 'primary_1': ['val_1', 'val_2']})}
    

    【讨论】:

      【解决方案2】:

      您可以使用dict.setdefault 用新列表初始化新的dict键:

      my_dictionary = {'main': {}}
      for k, v in separate_function:
          my_dictionary['main'].setdefault(k, []).append(v)
      

      my_dictionary 会变成:

      {'main': {'primary_1': ['val_1', 'val_2'], 'primary_3': ['val_2']}}
      

      【讨论】:

        猜你喜欢
        • 2018-09-09
        • 1970-01-01
        • 2014-06-13
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 2017-05-13
        • 1970-01-01
        相关资源
        最近更新 更多