在 Python 中使用 List Comprehension 方法将嵌套 Dictionary 转换为嵌套 List
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 不是从效率开始,而是从功能开始。之后您可以重新访问并改进 bottlenecks/etc...
也就是说我可以看到这样做的必要性,是的,最有效和可读的方法之一可能是一行代码片段。请参考The Zen of Python 因为它指的是我刚才说的。
但是为什么要列表? 散列 table/lookup 不是比唯一键字典的列表更有效吗?
最后,我想告诉您实现预期输出的正确方法。但是考虑一下我上面的想法。
>>> {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]}]
仅供参考:在向某人尤其是本网站提问之前,您应该尝试自己找到答案或尝试找到答案。
我想使用 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 不是从效率开始,而是从功能开始。之后您可以重新访问并改进 bottlenecks/etc...
也就是说我可以看到这样做的必要性,是的,最有效和可读的方法之一可能是一行代码片段。请参考The Zen of Python 因为它指的是我刚才说的。
但是为什么要列表? 散列 table/lookup 不是比唯一键字典的列表更有效吗?
最后,我想告诉您实现预期输出的正确方法。但是考虑一下我上面的想法。
>>> {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]}]
仅供参考:在向某人尤其是本网站提问之前,您应该尝试自己找到答案或尝试找到答案。