不过滤的字典列表的字典

问题描述 投票:0回答:1

我尝试了以下方法:

positions = {
    'IBM': [
        {'ticker': 'IBM', 'start_date': '20240415', 'end_date': 99999999},
        {'ticker': 'IBM', 'start_date': '20240416', 'end_date': 00000000},
        {'ticker': 'IBM', 'start_date': '20240417', 'end_date': 99999999}],
    'MRK': [
        {'ticker': 'mmm', 'start_date': '20240415', 'end_date': 99999999},
        {'ticker': 'mmm', 'start_date': '20240416', 'end_date': 00000000},
        {'ticker': 'mmm', 'start_date': '20240417', 'end_date': 99999999}]}

new_pos = [position for position in positions.values() 
           if position[0].get('end_date') == 99999999]

print(new_pos)

回来了:

[[{'ticker': 'IBM', 'start_date': '20240415', 'end_date': 99999999}, 
  {'ticker': 'IBM', 'start_date': '20240416', 'end_date': 0}, 
  {'ticker': 'IBM', 'start_date': '20240417', 'end_date': 99999999}], 
 [{'ticker': 'mmm', 'start_date': '20240415', 'end_date': 99999999}, 
  {'ticker': 'mmm', 'start_date': '20240416', 'end_date': 0}, 
  {'ticker': 'mmm', 'start_date': '20240417', 'end_date': 99999999}]]

为什么 if 条件不起作用以及为什么我们要取回所有记录 仅包含列表中带有

position[0]
的第一个记录?

我认为如果每个列表的第一个字典有 end = 99999999 那么我们会得到整个列表。我们如何取回 end = 99999999 的字典?

python list dictionary conditional-statements
1个回答
0
投票

这似乎可以解决问题:

new_pos = {key: [position for position in value 
if position.get('end_date') == 99999999] for key, value in positions.items()}

我们取回每个 key: 列表,然后应用 if 条件创建一个带有 key: 正确值列表的新字典

© www.soinside.com 2019 - 2024. All rights reserved.