每个键有多个值的字典,按其中一个值排序



我有一个键字典,每个键都有嵌套的键/标签值。如果这是一个糟糕的解释,请看下面的例子。

{
'ATVI': 
    {'momentum': 1695172800449.7812, 'sma': 81.97039999999998}, 
'ADBE': 
    {'momentum': 15.37463410207528, 'sma': 484.3043000000006}, 
'AMD': 
    {'momentum': 7.319987019427009e+20, 'sma': 85.5414}
}

我需要生成具有最高动量的20个键的列表。在不影响字典中的信息的情况下,怎样做是最好的呢?

另一种方法是存储按动量排序的顶级键列表。

data = {'ATVI': {'momentum': 1695172800449.7812, 'sma': 81.97039999999998}, 'ADBE': {'momentum': 15.37463410207528, 'sma': 484.3043000000006}, 'AMD': {'momentum': 7.319987019427009e+20, 'sma': 85.5414}}
sdata = list(data.keys())
sdata.sort(key=lambda x: data[x]["momentum"])

从这里开始,您必须在遍历列表时访问字典。如果你想让列表递减,你可以在key

之后设置reverse=True

编辑:要获得前20名,您可以通过sdata[-20:]切片列表,或者如果您使用反向sdata[:20]。如上所述,可能存在第20和21个元素具有相同值的问题。

您可以将动量放入单独的字典中:

momentums = {k: v['momentum'] for k, v in d.items()}

然后获取前20个最高值的键:

[k for k, v in momentums.items() if v in sorted(momentums.values())[-20:]]

(可能存在边缘情况,第20和21个最高动量完全相同,在这种情况下,它将任意选择一个键;所以这取决于你是否需要更复杂的东西,你需要多小心。

相关内容

  • 没有找到相关文章

最新更新