gpt4 book ai didi

python - json.dumps() 适用于 python 2.7 但不适用于 python 3

转载 作者:太空狗 更新时间:2023-10-30 02:42:59 24 4
gpt4 key购买 nike

我有以下代码:

import json

src_vol1 = {'provider_id':'src1'}
src_vol2 = {'provider_id':'src2'}
get_snapshot_params = lambda src_volume, trg_volume: {
'volumeId': src_volume['provider_id'],
'snapshotName': trg_volume['id']}
trg_vol1 = {'id':'trg1'}
trg_vol2 = {'id':'trg2'}
src_vols = [src_vol1, src_vol2]
trg_vols = [trg_vol1, trg_vol2]
snapshotDefs = map(get_snapshot_params , src_vols, trg_vols)
params = {'snapshotDefs': snapshotDefs}
json.dumps(params)

我需要它在 Python3 和 Python2.7 上都能工作,但是在 Python3 上我得到了

Traceback (most recent call last):   
File "./prog.py", line 16, in <module>
File "/usr/lib/python3.4/json/__init__.py", line 230, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python3.4/json/encoder.py", line 192, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.4/json/encoder.py", line 250, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python3.4/json/encoder.py", line 173, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <map object at 0xb72a1a0c> is not JSON serializable

我试图将 dict() 放在参数周围,但它没有用。有什么区别?我没有在文档中找到任何内容。

最佳答案

map behaves differently在 python2 和 3 之间。

要重现 python2 行为,请将 map(...) 替换为 list(map(...))

这在 python2 中仍然有效,但在 python2 中,它为 map 返回的列表创建了一个毫无意义的额外副本,这会消耗更多内存并运行得更慢。

要避免它,您可以尝试类似的方法:

try:
from itertools import imap as map # py2
except ImportError:
pass # py3, map is already defined apropriately

关于python - json.dumps() 适用于 python 2.7 但不适用于 python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34908383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com