[英]how can I create nested dictionary keys and assign them values from a list of namespaced key value pairs?
[英]How would I pull out similar value pairs from a dictionary and put them in a new dictionary?
我有一本包含 3 個鍵的字典: "Ticker"
、 "Title"
和"Value"
。 代碼鍵包含 100 個股票代碼,對應於同一個 position 中的購買和標題的價值。所以這是字典的一個例子:
{'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% 的所有股票代碼和價值。
我知道有些股票有多個名稱,但我不介意同一只股票出現在不止一本字典中。 有人能讓我知道我應該怎么做 go 嗎? 提前謝謝你,我已經堅持了一段時間。
如果您可以使用它,使用 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
由於您只想獲得"Title"
的"Ticker"
和"Value"
值,其值中包含"10%"
,因此您需要過濾"Ticker"
和"Value"
。 你可以做到冗長或使用字典理解:
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'}}
您的 origin 字典的另一個變化可能是,因為您始終使用相同的索引,而不是將信息存儲在三個單獨的字典中,而是使用tuples
,它按ticker 、 title和value的順序存儲股票,即:
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')}
我有一本字典,里面有 3 個鍵:“Ticker”、“Title”和“Value”。 代碼鍵包含 100 個股票代碼,對應於同一 position 中的購買價值和所有權。
這種數據組織方式毫無意義。 您的數據代表 100 個股票代碼; 股票代碼是一個連貫的東西,可以用字典表示; 因此,數據應該是一個字典列表,其中每個字典都有'Ticker'
、 'Title'
和'Value'
鍵並提供該股票的數據。
因此,第一步是正確組織數據; 那么任何進一步的操作都是微不足道的。
我們知道如何獲取具有給定 ID 號的股票的必要數據:我們訪問每個鍵,然后對每個鍵再次使用 ID 進行索引。 因此,獲取股票 0 的代碼只是all_stocks['Ticker'][0]
(假設我們的原始字典名為all_stocks
),等等。我們可以輕松地使用這種邏輯為股票 0 創建字典。讓我們把它包裝起來function 中的邏輯:
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]
}
現在使用列表理解來應用 function 是微不足道的:
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']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.