簡體   English   中英

從 Python 中的字典列表中提取多個鍵/值對的最有效方法?

[英]Most efficient way to extract multiple key/value pairs from a list of dictionaries of dictionaries in Python?

下面是我開始的數據。 理想情況下,我想從該字典列表中的第一個字典中捕獲“avg”、“low”、“high”和“numberOfAnalysts”鍵的“原始”值,以粗體顯示(或在雙星號之間捕獲(* *):

[**{'avg': {'raw': 3.02, 'fmt': '3.02'}, 'low': {'raw': 2.5, 'fmt': '2.5'}, 'high': {'raw': 3.15, 'fmt': '3.15'}, 'yearAgoEps': {'raw': 0.91, 'fmt': '0.91'}, 'numberOfAnalysts': {'raw': 20, 'fmt': '20', 'longFmt': '20'}, 'growth': {'raw': 2.319, 'fmt': '231.90%'}}**, {'avg': {'raw': 2.62, 'fmt': '2.62'}, 'low': {'raw': 2.36, 'fmt': '2.36'}, 'high': {'raw': 3.05, 'fmt': '3.05'}, 'yearAgoEps': {'raw': 2.92, 'fmt': '2.92'}, 'numberOfAnalysts': {'raw': 20, 'fmt': '20', 'longFmt': '20'}, 'growth': {'raw': -0.103, 'fmt': '-10.30%'}}, {'avg': {'raw': 10.14, 'fmt': '10.14'}, 'low': {'raw': 8.87, 'fmt': '8.87'}, 'high': {'raw': 10.68, 'fmt': '10.68'}, 'yearAgoEps': {'raw': 8.51, 'fmt': '8.51'}, 'numberOfAnalysts': {'raw': 26, 'fmt': '26', 'longFmt': '26'}, 'growth': {'raw': 0.192, 'fmt': '19.20%'}}, {'avg': {'raw': 11.67, 'fmt': '11.67'}, 'low': {'raw': 9.39, 'fmt': '9.39'}, 'high': {'raw': 13.08, 'fmt': '13.08'}, 'yearAgoEps': {'raw': 10.14, 'fmt': '10.14'}, 'numberOfAnalysts': {'raw': 26, 'fmt': '26', 'longFmt': '26'}, 'growth': {'raw': 0.15100001, 'fmt': '15.10%'}}, {'avg': {}, 'low': {}, 'high': {}, 'yearAgoEps': {}, 'numberOfAnalysts': {}, 'growth': {}}, {'avg': {}, 'low': {}, 'high': {}, 'yearAgoEps': {}, 'numberOfAnalysts': {}, 'growth': {}}]

我已經使用以下代碼切出“avg”鍵/值對,開始:

dispersion_analyst_data_final = dispersion_analyst_data_list_extract
dispersion_analyst_data_final_list_extract = [sub['avg'] for sub in dispersion_analyst_data_final]
print(str(dispersion_analyst_data_final_list_extract))

導致下面的 output:

[{'raw': 3.02, 'fmt': '3.02'}, {'raw': 2.62, 'fmt': '2.62'}, {'raw': 10.14, 'fmt': '10.14'}, {'raw': 11.67, 'fmt': '11.67'}, {}, {}]

我幾乎可以肯定,有一種更有效的方法可以深入到最終的“原始”值,而無需使用 sub() 進行多個離散步驟。 “avg”、“low”、“high”和“numberOfAnalysts”數據的第一個字典的“原始”值最終將輸出到 CSV 文件。 是否可以將多個 sub() 操作連接到“提取”object 中?

最終所需的數據是dispersion_analyst_data_list_extract 中第一個字典條目中的“avg”、“low”、“high”和“numberOfAnalysts”的“原始”值。 任何建議將不勝感激。

您提到--最終所需的數據是dispersion_analyst_data_list_extract 中第一個字典條目中的“avg”、“low”、“high”和“numberOfAnalysts”的“原始”值。

這可以通過以下方式完成。

dispersion_analyst_data_list_extract = [{'avg': {'raw': 3.02, 'fmt': '3.02'}, 'low': {'raw': 2.5, 'fmt': '2.5'}, 'high': {'raw': 3.15, 'fmt': '3.15'}, 'yearAgoEps': {'raw': 0.91, 'fmt': '0.91'}, 'numberOfAnalysts': {'raw': 20, 'fmt': '20', 'longFmt': '20'}, 'growth': {'raw': 2.319, 'fmt': '231.90%'}}, {'avg': {'raw': 2.62, 'fmt': '2.62'}, 'low': {'raw': 2.36, 'fmt': '2.36'}, 'high': {'raw': 3.05, 'fmt': '3.05'}, 'yearAgoEps': {'raw': 2.92, 'fmt': '2.92'}, 'numberOfAnalysts': {'raw': 20, 'fmt': '20', 'longFmt': '20'}, 'growth': {'raw': -0.103, 'fmt': '-10.30%'}}, {'avg': {'raw': 10.14, 'fmt': '10.14'}, 'low': {'raw': 8.87, 'fmt': '8.87'}, 'high': {'raw': 10.68, 'fmt': '10.68'}, 'yearAgoEps': {'raw': 8.51, 'fmt': '8.51'}, 'numberOfAnalysts': {'raw': 26, 'fmt': '26', 'longFmt': '26'}, 'growth': {'raw': 0.192, 'fmt': '19.20%'}}, {'avg': {'raw': 11.67, 'fmt': '11.67'}, 'low': {'raw': 9.39, 'fmt': '9.39'}, 'high': {'raw': 13.08, 'fmt': '13.08'}, 'yearAgoEps': {'raw': 10.14, 'fmt': '10.14'}, 'numberOfAnalysts': {'raw': 26, 'fmt': '26', 'longFmt': '26'}, 'growth': {'raw': 0.15100001, 'fmt': '15.10%'}}, {'avg': {}, 'low': {}, 'high': {}, 'yearAgoEps': {}, 'numberOfAnalysts': {}, 'growth': {}}, {'avg': {}, 'low': {}, 'high': {}, 'yearAgoEps': {}, 'numberOfAnalysts': {}, 'growth': {}}]

# dispersion_analyst_data_list_extract[0] is the first dictionary
# we access its desired keys using a list comprehension of the first dictionary
desired_output = [dispersion_analyst_data_list_extract[0][k] for k in ['avg', 'low', 'high',  'numberOfAnalysts']]

print(desired_output)
# Out: [{'raw': 3.02, 'fmt': '3.02'},
        {'raw': 2.5, 'fmt': '2.5'},
        {'raw': 3.15, 'fmt': '3.15'},
        {'raw': 20, 'fmt': '20', 'longFmt': '20'}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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