【问题标题】:update Dictionary By Incrementing通过递增更新字典
【发布时间】:2014-04-22 12:49:59
【问题描述】:
>>> D1 = {'potatoes':2.67,'sugar':1.98,'cereal':5.99,'crisps':1.09} 
>>> D2 = {'parsley':0.76,'cereal':3.22} 
>>> D1 = updateDictionaryByIncrementing(D1, D2) 

如何根据 D2 的内容更新 D1 的键/值?

【问题讨论】:

  • 你有什么问题?
  • 不清楚您在问什么,能否请您重新表述一下问题
  • 我想用 D2 的键/值更新 D1

标签: python dictionary


【解决方案1】:

您可以在键上使用循环:

for key in D2:
    D1[key] = D1.get(key, 0) + D2[key]

或者你可以使用collections.Counter()对象:

from collections import Counter

D1 = dict(Counter(D1) + Counter(D2))

后一种技术的演示:

>>> from collections import Counter
>>> D1 = {'potatoes':2.67,'sugar':1.98,'cereal':5.99,'crisps':1.09} 
>>> D2 = {'parsley':0.76,'cereal':3.22} 
>>> Counter(D1) + Counter(D2)
Counter({'cereal': 9.21, 'potatoes': 2.67, 'sugar': 1.98, 'crisps': 1.09, 'parsley': 0.76})
>>> dict(Counter(D1) + Counter(D2))
{'cereal': 9.21, 'parsley': 0.76, 'sugar': 1.98, 'potatoes': 2.67, 'crisps': 1.09}

【讨论】:

    【解决方案2】:

    计数器是一种方便的方法(计数不必是整数)

    >>> from collections import Counter
    >>> D1 = {'potatoes':2.67,'sugar':1.98,'cereal':5.99,'crisps':1.09}
    >>> D2 = {'parsley':0.76,'cereal':3.22} 
    >>> Counter(D1) + Counter(D2)
    Counter({'cereal': 9.21, 'potatoes': 2.67, 'sugar': 1.98, 'crisps': 1.09, 'parsley': 0.76})
    

    你也可以使用dict.update列出这个:

    >>> D1.update((k, D1.get(k, 0) + v) for k, v in D2.items())
    >>> D1
    {'potatoes': 2.67, 'parsley': 0.76, 'crisps': 1.09, 'cereal': 9.21, 'sugar': 1.98}
    

    【讨论】:

      【解决方案3】:

      如果你想增加字典的值,你可以像这样实现updateDictionaryByIncrementing

      def updateDictionaryByIncrementing(a,b):
         c = dict()
         for k,v in b.items():
              c[k] = a.get(k,0.0) + v
         return c
      

      通过使用a 字典的get 方法,可以使用默认值处理a 没有给定键值的情况。

      【讨论】:

        【解决方案4】:

        你可以像这样使用字典理解

        D1 = {'potatoes': 2.67, 'sugar': 1.98, 'cereal': 5.99, 'crisps': 1.09}
        D2 = {'parsley': 0.76, 'cereal': 3.22}
        print {key: D1.get(key, 0) + D2.get(key, 0) for key in D1.viewkeys() | D2}
        

        输出

        {'cereal': 9.21,
         'crisps': 1.09,
         'parsley': 0.76,
         'potatoes': 2.67,
         'sugar': 1.98}
        

        【讨论】:

          【解决方案5】:

          您可以使用try/except 执行此操作,如下所示:

          for k,v in D2.items():
              try:
                  D1[k] += v
              except KeyError:
                  D1[k] = v
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-19
            • 2015-12-29
            • 2020-06-09
            • 1970-01-01
            • 1970-01-01
            • 2020-03-07
            • 1970-01-01
            相关资源
            最近更新 更多