繁体   English   中英

使用 Python 中的列表理解方法将嵌套字典转换为嵌套列表

[英]Convert a nested Dictionary to a nested List with List Comprehension method in Python

我想使用 List Comprehension 方法将以下嵌套字典转换为嵌套列表列表以获得更好的性能:

n = {
"ETHBTC": {
    "2021-09-04 01:55:00": {
        "open": 0.078998,
        "close": 0.079007,
        "volume": 44.952200000000005
    },
     "2021-09-04 01:56:00": {
        "open": 0.079005,
        "close": 0.078959,
        "volume": 68.62790000000001
    },
    "2021-09-04 01:57:01": {
        "open": 0.07896,
        "close": 0.078962,
        "volume": 131.6615000000001
    },
    "2021-09-04 01:58:00": {
        "open": 0.078966,
        "close": 0.078988,
        "volume": 157.38520000000005
    }
}
   "BTCUSDT": {
    "2021-09-04 01:55:00": {
        "open": 49730.55,
        "close": 49710.01,
        "volume": 28.57857999999999
    },
    "2021-09-04 01:56:00": {
        "open": 49710.0,
        "close": 49681.35,
        "volume": 19.088980000000017
    },
    "2021-09-04 01:57:00": {
        "open": 49681.36,
        "close": 49737.05,
        "volume": 20.885500000000008
    },
    "2021-09-04 01:58:00": {
        "open": 49737.06,
        "close": 49757.33,
        "volume": 35.782369999999965
    }
}

预期输出与“关闭”值一起说,我试图在一个线性代码中执行此操作以提高效率:

result = ["ETHBTC"[0.079007, 0.078959, 0.078962, 0.078988],
          "BTCUSDT"[49710.01, 49681.35, 49737.05, 49757.33]]
 

仅仅因为屏幕上的代码更少并不意味着它更高效。 除此之外,如果向下转换数据意味着丢失有意义的数据,那么它对于宏伟的计划来说是多余的。 此外,python 不是从效率开始,而是从功能开始。 之后,您可以重新审视并改进瓶颈/等...

也就是说,我可以看到这样做的必要性,是的,最有效和最易读的方法之一可能是一行代码。 请参考Python 之禅,因为它指的是我刚才所说的。

但是为什么要列出来呢? 哈希表/查找不是比唯一键的字典列表更有效吗?


最后,我告诉你什么是实现预期输出的正确方法。 但请考虑我上面的想法。

>>> {k: [d['close'] for d in v.values()] for k, v in n.items()}
{"ETHBTC": [0.079007, 0.078959, 0.078962, 0.078988],
 "BTCUSDT": [49710.01, 49681.35, 49737.05, 49757.33]}

如果你必须有一个字典列表,你可以很容易地修改上面的代码来达到预期的结果:

>>> [{k: [d['close'] for d in v.values()]} for k, v in n.items()]
[{"ETHBTC": [0.079007, 0.078959, 0.078962, 0.078988]},
 {"BTCUSDT": [49710.01, 49681.35, 49737.05, 49757.33]}]

仅供参考在向某人(尤其是本网站)提问之前,您应该尝试自己找到答案或尝试找到答案。

暂无
暂无

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

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