2016-01-18 4 views
2

У меня есть список, содержащий несколько словарей. Каждый словарь содержит точные 7 ключей. Но значения ключей - это сочетание строки и целого. Я хочу добавить значения integer one.

Ниже приведен список моих словарей:
Я хочу просто добавить значения vega, theta, delta, gamma из всех трех словарей.Как добавить значения словаря с теми же ключами в Python

[{'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}] 
+0

@Zetys не получил вам .. –

+0

@RamanBalyan Возможно, покажите, что вы ожидаете от конечного результата. –

+0

Я хочу, чтобы все эти словари упоминались в вопросе с помощью одного дополнительного словаря, содержащего добавленные значения. –

ответ

2

Вот один вариант:

>>> 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} 
0

Ну, если вы уже знаете, ключи, значения которых вы хотите добавить, вы можете просто создать список подстановок в то время как переборе элементов и добавление их.

Что-то вдоль этих линий:

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) 
+0

'sum' - плохой выбор для имени переменной, поскольку он затеняет встроенную функцию' sum'. Кроме того, это не отвечает на вопрос OP: он хочет суммы за каждый ключ, а не за общую сумму. –

+0

@ PM2Ring справедливая точка, это был довольно причудливый и грязный ответ. Я отредактирую его. – Bhargav

+0

ОК. Тем не менее, вы по-прежнему не даете индивидуального результата. И теперь вы затеняете встроенный тип 'object'. –

0

Просто итерацию и использовать 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) 
0

Используйте это:

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 
+0

Спасибо! Это сработало :) –

Смежные вопросы