从Python中的字典列表中提取多个键/值对的最有效方法是什么?

从Python中的字典列表中提取多个键/值对的最有效方法是什么?,python,dictionary,Python,Dictionary,下面是我开始使用的数据。理想情况下,我希望从该词典列表中的第一个词典中捕获“avg”、“low”、“high”和“numberOfAnalysters”键的“raw”值,如粗体所示(或在双星号(**)之间捕获): 首先,我使用以下代码切掉“avg”键/值对: dispersion_analyst_data_final = dispersion_analyst_data_list_extract dispersion_analyst_data_final_list_extract = [sub['

下面是我开始使用的数据。理想情况下,我希望从该词典列表中的第一个词典中捕获“avg”、“low”、“high”和“numberOfAnalysters”键的“raw”值,如粗体所示(或在双星号(**)之间捕获):

首先,我使用以下代码切掉“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))
结果如下:

[{'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()进行多个离散步骤而深入到最终的“原始”值。“平均”、“低”、“高”和“NumberOfAnalysters”数据的第一个字典的“原始”值最终将输出到CSV文件。是否可以将多个sub()操作连接到CSV文件中“提取”对象

最终所需数据是Discredition\u analyst\u data\u list\u extract中第一个字典条目中的“avg”、“low”、“high”和“numberOfAnalysts”的“原始”值。如有任何建议,将不胜感激。

您提到的——最终所需数据是第一个词汇中的“avg”、“low”、“high”和“NumberOfAnalysters”的“原始”值离散度分析数据列表提取中没有条目

这可以通过以下方法实现

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'}]

变量分散度分析数据列表是否提取原始列表?我不确定您想要什么,因为您的第一段暗示您只想从第一个字典中捕获数据,但您的示例输出和列表理解显示您正在从所有字典中获取数据。正确。原始起点列表是分散度分析_数据列表提取。变量离散度分析数据最终列表提取离提取上述“原始”值更近了一步。我想看看这个工作流是否可以在原始起始列表离散度分析数据列表提取的基础上进行更好的优化。对于
离散度分析数据列表额外中的第一个字典ct
您是否试图获取与键相关的值:
“平均”、“低”、“高”、“numberOfAnalysts”
?DarrylG,正确,并且以更高效/简化的方式
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'}]