如何根据某些条件在字典中求和?

时间:2019-12-21 13:08:26

标签: python

好吧,我有这样的字典,其中令牌号是关键。内部有名称,也有按键。我想过滤掉罢工相同且名称包含股票名称的那些键和值。 因此,可以说TATASTEEL为股票名称,行权价为540。因此,我想过滤掉该股票,并为此获得2个字典项,即22958594:{'name':'TATASTEEL19DEC540PE','Strike':540.0},22958338:{ 'name':'TATASTEEL19DEC540CE','Strike':540.0}

22958594: {'name': 'TATASTEEL19DEC540PE', 'Strike': 540.0}, 
22958338: {'name': 'TATASTEEL19DEC540CE', 'Strike': 540.0}, 
22958082: {'name': 'TATASTEEL19DEC530PE', 'Strike': 530.0},
22957826: {'name': 'TATASTEEL19DEC530CE', 'Strike': 530.0}, 
22957570: {'name': 'TATASTEEL19DEC520PE', 'Strike': 520.0}, 
22957314: {'name': 'TATASTEEL19DEC520CE', 'Strike': 520.0},
22957058: {'name': 'TATASTEEL19DEC510PE', 'Strike': 510.0}, 
22956802: {'name': 'TATASTEEL19DEC510CE', 'Strike': 510.0}, 
22956546: {'name': 'TATASTEEL19DEC500PE', 'Strike': 500.0},
22956290: {'name': 'TATASTEEL19DEC500CE', 'Strike': 500.0}, 
22956034: {'name': 'TATASTEEL19DEC490PE', 'Strike': 490.0}, 
22955778: {'name': 'TATASTEEL19DEC490CE', 'Strike': 490.0},
22955522: {'name': 'TATASTEEL19DEC480PE', 'Strike': 480.0}, 
22955266: {'name': 'TATASTEEL19DEC480CE', 'Strike': 480.0}, 
22955010: {'name': 'TATASTEEL19DEC470PE', 'Strike': 470.0},
22954754: {'name': 'TATASTEEL19DEC470CE', 'Strike': 470.0}, 
22954498: {'name': 'TATASTEEL19DEC460PE', 'Strike': 460.0},

2 个答案:

答案 0 :(得分:3)

对此有多种方法,您需要对要过滤的精确程度进行更具体的说明。但是要显示上面要求的示例,我会做类似这样的事情。

original_data = {22958594: {'name': 'TATASTEEL19DEC540PE', 'Strike': 540.0}, 22958338: {'name': 'TATASTEEL19DEC540CE', 'Strike': 540.0}, 22958082: {'name': 'TATASTEEL19DEC530PE', 'Strike': 530.0},
 22957826: {'name': 'TATASTEEL19DEC530CE', 'Strike': 530.0}, 22957570: {'name': 'TATASTEEL19DEC520PE', 'Strike': 520.0}, 22957314: {'name': 'TATASTEEL19DEC520CE', 'Strike': 520.0},
 22957058: {'name': 'TATASTEEL19DEC510PE', 'Strike': 510.0}, 22956802: {'name': 'TATASTEEL19DEC510CE', 'Strike': 510.0}, 22956546: {'name': 'TATASTEEL19DEC500PE', 'Strike': 500.0},
 22956290: {'name': 'TATASTEEL19DEC500CE', 'Strike': 500.0}, 22956034: {'name': 'TATASTEEL19DEC490PE', 'Strike': 490.0}, 22955778: {'name': 'TATASTEEL19DEC490CE', 'Strike': 490.0},
 22955522: {'name': 'TATASTEEL19DEC480PE', 'Strike': 480.0}, 22955266: {'name': 'TATASTEEL19DEC480CE', 'Strike': 480.0}, 22955010: {'name': 'TATASTEEL19DEC470PE', 'Strike': 470.0},
 22954754: {'name': 'TATASTEEL19DEC470CE', 'Strike': 470.0}, 22954498: {'name': 'TATASTEEL19DEC460PE', 'Strike': 460.0}}

strike = 540

stock_name = 'TATASTEEL'

filtered_data = {k:v for k, v in original_data.items() if v['Strike']==strike and v['name'].startswith(stock_name)}

答案 1 :(得分:2)

您可以在此处使用熊猫:

d = {
 22958594: {'name': 'TATASTEEL19DEC540PE', 'Strike': 540.0},
 22958338: {'name': 'TATASTEEL19DEC540CE', 'Strike': 540.0},
 22958082: {'name': 'TATASTEEL19DEC530PE', 'Strike': 530.0},
 22957826: {'name': 'TATASTEEL19DEC530CE', 'Strike': 530.0},
 22957570: {'name': 'TATASTEEL19DEC520PE', 'Strike': 520.0},
 22957314: {'name': 'TATASTEEL19DEC520CE', 'Strike': 520.0},
 22957058: {'name': 'TATASTEEL19DEC510PE', 'Strike': 510.0},
 22956802: {'name': 'TATASTEEL19DEC510CE', 'Strike': 510.0},
 22956546: {'name': 'TATASTEEL19DEC500PE', 'Strike': 500.0},
 22956290: {'name': 'TATASTEEL19DEC500CE', 'Strike': 500.0},
 22956034: {'name': 'TATASTEEL19DEC490PE', 'Strike': 490.0},
 22955778: {'name': 'TATASTEEL19DEC490CE', 'Strike': 490.0},
 22955522: {'name': 'TATASTEEL19DEC480PE', 'Strike': 480.0},
 22955266: {'name': 'TATASTEEL19DEC480CE', 'Strike': 480.0},
 22955010: {'name': 'TATASTEEL19DEC470PE', 'Strike': 470.0},
 22954754: {'name': 'TATASTEEL19DEC470CE', 'Strike': 470.0},
 22954498: {'name': 'TATASTEEL19DEC460PE', 'Strike': 460.0}}

import pandas as pd
df = pd.DataFrame(d).T    # .T was used for transpose of dataframe

print(df[df.name.str.contains('TATASTEEL') & (df.Strike == 540)].T.to_dict())  # here i used boolean indexing

输出

{22958594: {'Strike': 540.0, 'name': 'TATASTEEL19DEC540PE'}, 
22958338: {'Strike': 540.0, 'name': 'TATASTEEL19DEC540CE'}}
相关问题