簡體   English   中英

我如何從字典中提取相似的值對並將它們放入新字典中?

[英]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 ,它按tickertitlevalue的順序存儲股票,即:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM