我尝试了以下方法:
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 的字典?
这似乎可以解决问题:
new_pos = {key: [position for position in value
if position.get('end_date') == 99999999] for key, value in positions.items()}
我们取回每个 key: 列表,然后应用 if 条件创建一个带有 key: 正确值列表的新字典