如何从字典中取出相似的值对并将它们放入新字典中?

  • 本文关键字:字典 新字典 相似 python dictionary
  • 更新时间 :
  • 英文 :


我有一个字典,里面有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']]

相关内容

  • 没有找到相关文章

最新更新