【问题标题】:How to add the values of dictionary with same keys in Python如何在Python中添加具有相同键的字典值
【发布时间】:2016-01-18 17:43:54
【问题描述】:

我有一个包含多个字典的列表。每个字典包含确切的 7 个键。但是,键的值是字符串和整数的混合。我想添加整数一的值。

下面是我的字典列表:
我只想从所有三个字典中添加 vega、theta、delta、gamma 的值。

[{'option_type': 'Call', 'expiry': datetime.datetime(1993, 3, 4, 15, 20, 26), 'vega': 2, 'notional': 7840, 'delta': 1, 'strike': 520, 'theta': 5, 'gamma': 3}, {'option_type': 'Call', 'expiry': datetime.datetime(1995, 11, 14, 10, 25, 50), 'vega': 2, 'notional': 1930, 'delta': 1, 'strike': 1960, 'theta': 5, 'gamma': 3}, {'option_type': 'Put', 'expiry': datetime.datetime(1993, 3, 7, 17, 2, 30), 'vega': 2, 'notional': 5530, 'delta': 1, 'strike': 1520, 'theta': 5, 'gamma': 3}]

【问题讨论】:

  • @Zetys 没找到你..
  • @RamanBalyan 也许会显示您期望的最终结果。
  • 我希望问题中提到的所有这些字典都有一个包含附加值的额外字典。
  • 例如。我要处理的字典列表是: var1 = [{'a':1, 'b': "test", 'c':4},{'a':3, 'b': "test1" , 'c':2}] 和我想要的输出格式: var1 = [{'a':1, 'b': "test", 'c':4},{'a':3, ' b': "test1", 'c':2}] var2 = {'a':4, 'c':6}
  • 谢谢!它按预期工作:)

标签: python dictionary


【解决方案1】:

这是一种选择:

>>> import datetime
>>> data_set = [{'option_type': 'Call', 'expiry': datetime.datetime(1993, 3, 4, 15, 20, 26), 'vega': 2, 'notional': 7840, 'delta': 1, 'strike': 520, 'theta': 5, 'gamma': 3}, {'option_type': 'Call', 'expiry': datetime.datetime(1995, 11, 14, 10, 25, 50), 'vega': 2, 'notional': 1930, 'delta': 1, 'strike': 1960, 'theta': 5, 'gamma': 3}, {'option_type': 'Put', 'expiry': datetime.datetime(1993, 3, 7, 17, 2, 30), 'vega': 2, 'notional': 5530, 'delta': 1, 'strike': 1520, 'theta': 5, 'gamma': 3}]
>>> 
>>> counts = {'vega': 0, 'theta': 0, 'delta': 0, 'gamma': 0}
>>> 
>>> for data in data_set:
...     for key in counts.keys():
...         counts[key] += data[key]
... 
>>> 
>>> counts
{'gamma': 9, 'vega': 6, 'delta': 3, 'theta': 15}

【讨论】:

    【解决方案2】:

    简单地迭代并使用sum()方法

    sum_vega = sum(i['vega'] for i in give_dict)
    sum_theta = sum(i['theta'] for i in give_dict)
    sum_delta = sum(i['delta'] for i in give_dict)
    sum_gamma = sum(i['gamma'] for i in give_dict)
    

    【讨论】:

      【解决方案3】:

      使用这个:

      import datetime
      
      my_list=[
          {
           "vega": 2, 
           "notional": 7840, 
           "delta": 1, 
           "strike": 520, 
           "theta": 5, 
           "option_type": "Call", 
           "gamma": 3, 
           "expiry": datetime.datetime(1993, 3, 4, 15, 20, 26)
          },
          {
           "vega": 2, 
           "notional": 1930, 
           "delta": 1, 
           "strike": 1960, 
           "theta": 5, 
           "option_type": "Call", 
           "gamma": 3, 
           "expiry": datetime.datetime(1995, 11, 14, 10, 25, 50)
          },
          {
           "vega": 2, 
           "notional": 5530, 
           "delta": 1, 
           "strike": 1520, 
           "theta": 5, 
           "option_type": "Put", 
           "gamma": 3, 
           "expiry": datetime.datetime(1993, 3, 7, 17, 2, 30)
          }
      ]
      
      result = {}
      for dict_ in my_list:
          for key in  dict_:
              if result.has_key(key):
      
                  if isinstance(dict_[key], int):# For integers
                      result[key] += dict_[key]
      
                  #if isinstance(dict_[key], str):# For strings
                  #    result[key] = result[key] + '' + dict_[key]
                  # We do not sum other types
              else:
                  result[key] = dict_[key]
      
      print result
      

      【讨论】:

        【解决方案4】:

        如果您已经知道要添加其值的键,则可以在遍历项目并添加它们时简单地创建一个查找列表。

        类似的东西:

        lookup_count_list = {'vega':0, 'theta':0, 'delta':0, 'gamma':0}
        
        dict_list = [{'option_type': 'Call', 'expiry': datetime.datetime(1993, 3, 4, 15, 20, 26), 'vega': 2, 'notional': 7840, 'delta': 1, 'strike': 520, 'theta': 5, 'gamma': 3}, {'option_type': 'Call', 'expiry': datetime.datetime(1995, 11, 14, 10, 25, 50), 'vega': 2, 'notional': 1930, 'delta': 1, 'strike': 1960, 'theta': 5, 'gamma': 3}, {'option_type': 'Put', 'expiry': datetime.datetime(1993, 3, 7, 17, 2, 30), 'vega': 2, 'notional': 5530, 'delta': 1, 'strike': 1520, 'theta': 5, 'gamma': 3}]
        
        
        for item in dict_list:
            for key, value in item.iteritems():
                if key in lookup_count_list.keys():
                    item[key] += 1
        
        print(lookup_count_list)
        

        【讨论】:

        • sum 是变量名的错误选择,因为它隐藏了内置的 sum 函数。此外,这并没有回答 OP 的问题:他想要每个键的总和,而不是总计。
        • @PM2Ring 公平点,这是一个非常古怪和肮脏的答案。我会编辑它。
        • 好的。但是,您仍然没有给出个人总数。现在,您将遮蔽内置的 object 类型。
        • @PM2Ring 这个问题对于它想要的金额有点模棱两可。我会再次编辑我的答案。谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-28
        • 2021-12-06
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 2021-05-09
        相关资源
        最近更新 更多