繁体   English   中英

从嵌套字典中获取列的最大值

[英]Get column's max value from a nested dictionary

下面的输出是我正在尝试使用的字典的一部分的漂亮打印快照。 我希望输出p列中所有条目的最高值,以及它的主字典键。

在下面的示例输出中, GRTEUR p的值高于来自任何其他主键的p任何其他值,因此我想返回主键和值,因此GRTEUR-0.1752234098475558

我已经阅读了 Pandas 并使用了pandas.DataFrame.max()但我没有找到任何关于如何评估嵌套字典 ( 1h ) 的键 ( p ) 中的值的示例。

任何指针?

data = {
    "LUNAEUR": {
        "1h": {
            "ot": "2021-07-09 08:00:00",
            "o": 6.033,
            "h": 6.551,
            "l": 5.983,
            "ct": "2021-07-09 08:59:59.999000",
            "p": -1.660459342023591
        },
        "stream0": {
            "c": 6.444,
            "v": 1393.808,
            "ct": "2021-07-09 09:59:59.999000"
        },
        "stream1": {
            "c": 6.446,
            "v": 1171.177,
            "ct": "2021-07-09 09:59:59.999000"
        }
    },
    "THETAEUR": {
        "1h": {
            "ot": "2021-07-09 08:00:00",
            "o": 4.992,
            "h": 5.076,
            "l": 4.956,
            "ct": "2021-07-09 08:59:59.999000",
            "p": -0.2963841138114934
        },
        "stream0": {
            "c": 5.061,
            "v": 492.138,
            "ct": "2021-07-09 09:59:59.999000"
        },
        "stream1": {
            "c": 5.067,
            "v": 423.079,
            "ct": "2021-07-09 09:59:59.999000"
        }
    },
    "GRTEUR": {
        "1h": {
            "ot": "2021-07-09 08:00:00",
            "o": 0.5616,
            "h": 0.5717,
            "l": 0.5523,
            "ct": "2021-07-09 08:59:59.999000",
            "p": -0.1752234098475558
        },
        "stream0": {
            "c": 0.5707,
            "v": 105.17,
            "ct": "2021-07-09 09:59:59.999000"
        },
        "stream1": {
            "c": 0.571,
            "v": 19.71,
            "ct": "2021-07-09 09:59:59.999000"
        }
    }
}

使用 python max(..., key=...)过滤数据:

key, value = max(data.items(), key=lambda x: x[1]["1h"]["p"])
print(key, value["1h"]["p"])

要忽略那些值不包含“p”的键,您可以提供一个非常小的默认值

import sys
max(data.items(), key=lambda x: x[1]["1h"].get("p", -sys.float_info.max))

或在找到最大值之前过滤:

max(((key, val) for key, val in data.items() if "p" in val["1h"]),
    key=lambda x: x[1]["1h"]["p"])

reduce 函数给出每个字典中嵌套键的值。 也许你可以试试这个:

def deep_get(dictionary, *keys):
  print(keys)
  return reduce(lambda d, key: d.get(key, None) if isinstance(d, dict) else None, keys, dictionary)

val_list=[]
key_list=["LUNAEUR","THETAEUR","GRTEUR"]
for item in key_list:
  key1=item
  key2='1h'
  key3='p'
  print(deep_get(data, key1,key2,key3))
  val_list.append(deep_get(data, key1,key2,key3))
  print(max(val_list)

Output:
-0.1752234098475558

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM