代码之家  ›  专栏  ›  技术社区  ›  Micah Pearce

将嵌套词典的结果添加到一起

  •  0
  • Micah Pearce  · 技术社区  · 6 年前

    有没有比下面更有效的方法来对一个子词典的键求和?

    for house in my_dictionary:
                artifact['Total']['Count'] += artifact['A']['Count']
                artifact['Total']['Action'] += artifact['B']['Action']
                artifact['Total']['Passive'] += artifact['C']['Passive']  
    

    我觉得有办法把这个浓缩,但我想不出来。我已经在下面的问题表格中写下了正在发生的事情。我想出了一个答案,但我认为有一个更好的答案。

    如果我有下列词典 my_dictionary :

     {
            "A": {
                "Count": 3,
                "Action": 3,
                "Passive": 0
            },
            "B": {
                "Count": 1,
                "Action": 0,
                "Passive": 1
            },
            "C": {
                "Count": 1,
                "Action": 1,
                "Passive": 0
            },
            "Total": {
                "Count": 0,
                "Action": 0,
                "Passive": 0
            }
    

    一旦 我的字典 已经被创造出来了 Total 空白),我填写 合计 哪里 合计 其他字段的总和是各自的键吗?

    {
            "A": {
                "Count": 3,
                "Action": 3,
                "Passive": 0
            },
            "B": {
                "Count": 1,
                "Action": 0,
                "Passive": 1
            },
            "C": {
                "Count": 1,
                "Action": 1,
                "Passive": 0
            },
            "Total": {
                "Count": 5,
                "Action": 4,
                "Passive": 1
            }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Mark    6 年前

    collections.Counter 处理得很好,比如:

    from collections import Counter
    
    counts = Counter()
    for o in my_dictionary.values():
       counts.update(o)
    
    my_dictionary['Total'] = dict(counts)
    

    Total将保存结果:

    {'Count': 5, 'Action': 4, 'Passive': 1}
    

    你不需要定义 Total 在此之前, Counter 将在 counts 为你名单上的每一把钥匙做笔录。

        2
  •  0
  •   Grismar    6 年前

    你的问题可以被改写为“我怎么能把字典中的键的值加起来,作为字典值存储,假设所有的字典都有相同的密钥?”

    看起来像是:

    result = {k: 0 for k, _ in data[next(iter(data))].items()}
    for _, d in data.items():
        for k, v in d.items():
            result[k] += v
    

    但是,也许不是输入中的所有词典都有相同的键?

    result = {}
    for _, d in data.items():
        for k, v in d.items():
            if k in result:
                result[k] += v
            else:
                result[k] = v
    

    下次请提供 minimal, complete and verifiable example 你的问题。