【问题标题】:Best practices for dealing with nested dicts?处理嵌套字典的最佳实践?
【发布时间】:2020-10-21 08:23:12
【问题描述】:

我正在将数据从 CSV 加载到 db 模型。我使用中间层进行数据验证。这是一个基本示例:

{'Team': 
  {'Account': 
    {'InvoiceID' : invID,
     'Amount': aLotOfMoney}
}}

for team in teams.:
     for account in teams[team]:
         for invoice in teams[team][account]:
             acc = Account(ID = teams[team][account][invoiceID],
                           amount=teams[team][account][amount])
             acc.save()

这很好用,但它远非优雅,而且似乎效率很低。有没有办法返回嵌套的Dict 而不是key

【问题讨论】:

    标签: python django dictionary data-structures hash


    【解决方案1】:

    您是否希望使字典变平? IE。你会得到一个字典,每个键都是它在每个字典中的键的组合。

    你可以使用像flatten-dict这样的预制函数,或者你可以自己写一些东西。

    这个示例嵌套字典:

    {'ints': {'1': 1, '2': 2, '3': 3}, 'letters': {'a': 'A', 'b': 'B'}}
    

    将被展平为:

    {'ints.1': 1, 'ints.2': 2, 'ints.3': 3, 'letters.a': 'A', 'letters.b': 'B'}
    

    自制:

    def flatten_dict(data, keystring=''):
        if type(data) is dict:
            keystring = keystring + '.' if keystring else keystring
            for k in data:
                yield from flatten_dict(data[k], keystring + k)
        else:
            yield keystring, data
    

    【讨论】:

    • 恰恰相反。我想要保留链接的内部嵌套字典,而不仅仅是键。在您的解决方案中,我将不得不拆分密钥以获取最后一部分。我需要业务逻辑中元数据的 3 个 dict 级别,并希望保留它们的层次结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2011-07-12
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多