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

2024-07-04 06:08:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,其中记号数字是关键。里面有名字,还有钥匙。我想过滤掉那些Strike相同并且name包含股票名称的键和值。 假设塔塔斯泰尔是股票名称,斯泰克是540。所以我想过滤掉它,并将得到2个字典项,即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},

Tags: name字典数字名字关键钥匙strike记号
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'}}

有多种方法可以做到这一点,你需要更具体一点,你到底想如何过滤。但是为了展示上面所要求的一个例子,我会这样做。你知道吗

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

相关问题 更多 >

    热门问题