Python 如何根据某些条件对字典中的值求和?

Python 如何根据某些条件对字典中的值求和?,python,Python,我有一本字典,里面的记号号是关键。里面有名字,还有钥匙。我想过滤掉Strike相同且name包含股票名称的键和值。 假设塔塔斯泰尔是股票名称,strike是540。所以我想过滤掉它,并将得到两个字典项,即22958594:{'name':'tatastel19dec540pe','Strike':540.0},22958338:{'name':'tatastel19dec540ce','Strike':540.0} 22958594: {'name': 'TATASTEEL19DEC540PE'

我有一本字典,里面的记号号是关键。里面有名字,还有钥匙。我想过滤掉Strike相同且name包含股票名称的键和值。 假设塔塔斯泰尔是股票名称,strike是540。所以我想过滤掉它,并将得到两个字典项,即22958594:{'name':'tatastel19dec540pe','Strike':540.0},22958338:{'name':'tatastel19dec540ce','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},

有多种方法可以实现这一点,您需要更具体地说明您希望如何进行过滤。但是为了展示上面所要求的例子,我会这样做

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

有多种方法可以实现这一点,您需要更具体地说明您希望如何进行过滤。但是为了展示上面所要求的例子,我会这样做

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

您可以在此处使用熊猫:

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

您可以在此处使用熊猫:

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

这是一个dictionary对象,其值又是dictionary吗?请发布一个最小的可复制示例,以便人们更好地理解您的问题:这是一个字典对象,其值又是字典吗?请发布一个最小的可复制示例,以便人们能够更好地理解您的问题:如果您希望对不同的罢工值进行分组,那么您可以按照如下所示,为原始罢工数据中的项目创建一组罢工值={item[“strike”]。values()}然后按\u strike\u值的集合进行筛选。如果希望对不同的strike值进行分组,则可以按如下所示,为原始\u数据中的项创建一组可用的strike值={item[“strike”]。values()},然后按\u strike\u值的集合进行筛选。