我有一个字典,里面有3个键:"Ticker"
,"Title"
和"Value"
。股票报价键包含100个股票报价机,它们对应于位于同一位置的购买和标题的值。下面是一个字典的例子:
{'Ticker': {0: 'AKUS', 1: 'HHC', 2: 'IOVA', 3: 'DDOG'},
'Title': {0: '10%', 1: 'Dir, 10%', 2: 'Dir', 3: 'Dir'},
'Value': {0: '+$374,908,350', 1: '+$109,214,243', 2: '+$65,000,000', 3: '+$49,999,940'}}
所以"AKUS"
对应于10%和+$374,908,350。
我在字典中只显示了4个条目,但我的实际字典有100个。
我的问题是关于一个新字典,它只包含票子和值,但该字典中的所有内容都具有相同的标题。
例如,我想创建一个10%的字典,其中包含标题包含10%的股票的所有报价机和股票值。
我知道一些股票有多个标题,但我不介意同一只股票在多个字典中出现。有人能告诉我该怎么做这件事吗?提前谢谢你,我已经被困了一段时间了。
如果您可以使用的话,使用pandas很简单;假设你的字典命名为d:
df = pd.DataFrame.from_dict(d)
df10 = df[df['Title'].str.contains('10%')]
print(df10)
生产
Ticker Title Value
0 AKUS 10% +$374,908,350
1 HHC Dir, 10% +$109,214,243
由于您只想获得具有包含"10%"
的"Title"
的"Ticker"
和"Value"
值,因此您需要过滤"Ticker"
和"Value"
。您可以使用verbose或使用字典推导:
stocks = {'Ticker': {0: 'AKUS', 1: 'HHC', 2: 'IOVA', 3: 'DDOG'},
'Title': {0: '10%', 1: 'Dir, 10%', 2: 'Dir', 3: 'Dir'},
'Value': {0: '+$374,908,350', 1: '+$109,214,243', 2: '+$65,000,000', 3: '+$49,999,940'}
}
ten_percent_stocks = {"Ticker":{}, "Value": {}}
for k, v in stocks["Title"].items():
if "10%" in v:
ten_percent_stocks["Ticker"][k] = stocks["Ticker"][k]
ten_percent_stocks["Value"][k] = stocks["Value"][k]
使用字典推导式,您可以通过以下操作获得相同的结果:
ten_percent_stocks = {"Ticker": {k: v for k, v in stocks["Ticker"].items()
if "10%" in stocks["Title"][k]},
"Value": {k: v for k, v in stocks["Value"].items()
if "10%" in stocks["Title"][k]}
}
但是我会发现编写实际的for
循环更简洁一些。这两种情况的结果都是:
{'Ticker': {0: 'AKUS', 1: 'HHC'}, 'Value': {0: '+$374,908,350', 1: '+$109,214,243'}}
在你的原始字典中的一个额外的改变可能是,当你总是使用相同的索引时,而不是将信息存储在三个独立的字典中,使用tuples
,它以股票代码,标题和值的顺序存储股票,即:
stocks = {0: ('AKUS', '10%', '+$374,908,350'),
1: ('HHC', 'Dir, 10%', '+$109,214,243'),
2: ('IOVA', 'Dir', '+$65,000,000'),
3: ('DDOG', 'Dir', '+$49,999,940')
}
# Filtering stocks where title contains "10%":
ten_percent_stocks = {k: (v[0], v[2]) for k, v in stocks.items() if "10%" in v[1]}
给出如下结果:
{0: ('AKUS', '+$374,908,350'), 1: ('HHC', '+$109,214,243')}
我有一个字典,里面有三个键:"Ticker", "Title"one_answers";Value"。ticker键包含100个股票报价机,它们对应于位于同一位置的购买和标题的值。
这种数据组织没有意义。你的数据代表100个股票行情;股票报价机是一个连贯的东西,可以用字典来表示;因此,数据应该是一个字典列表,其中每个字典都有'Ticker'
,'Title'
和'Value'
键,并给出该股票的数据。
所以,第一步是正确组织数据;那么任何进一步的操作都是微不足道的。
我们知道如何获取具有给定ID号的股票的必要数据:我们访问每个键,然后为每个键再次索引ID。因此,获得股票0的报价代码只是all_stocks['Ticker'][0]
(假设我们的原始字典命名为all_stocks
),等等。我们可以很容易地使用这种逻辑为股票0创建一个字典。让我们把这个逻辑包装在一个函数中:
def make_stock_dict(all_stocks, stock_id):
return {
'Ticker': all_stocks['Ticker'][stock_id],
'Title': all_stocks['Title'][stock_id],
'Value': all_stocks['Value'][stock_id]
}
现在使用列表推导式来应用下面的函数就很简单了:
converted_stocks = [make_stock_dict(all_stocks, i) for i in range(100)]
例如,我想创建一个10%的字典,其中包含标题包含10%的股票的所有报价和值。
同样的道理,现在我们已经正确地组织了数据:我们找出告诉我们一只股票是否合格的代码,然后将其应用于每只股票。
[s for s in converted_stocks if '10%' in s['Title']]