相关疑难解决方法(0)

格式浮动标准json模块

我在python 2.6中使用标准的json模块来序列化浮点数列表.但是,我得到的结果如下:

>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)

我希望浮点数只用两位小数进行格式化.输出应如下所示:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Run Code Online (Sandbox Code Playgroud)

我尝试过定义自己的JSON Encoder类:

class MyEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, float):
            return format(obj, '.2f')
        return json.JSONEncoder.encode(self, obj)
Run Code Online (Sandbox Code Playgroud)

这适用于唯一的浮动对象:

>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Run Code Online (Sandbox Code Playgroud)

但嵌套对象失败:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)

我不想有外部依赖,所以我更喜欢坚持使用标准的json模块.

我怎样才能做到这一点?

python floating-point formatting json

89
推荐指数
9
解决办法
6万
查看次数

"添加到set"在java中返回一个布尔值 - python怎么样?

在Java中,我喜欢使用"添加到集合"操作返回的布尔值来测试元素是否已经存在于集合中:

if (set.add("x")) {
   print "x was not yet in the set";
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,Python中有什么方便吗?我试过了

 z = set()
 if (z.add(y)):
     print something
Run Code Online (Sandbox Code Playgroud)

但它没有打印任何东西.我错过了什么吗?谢谢!

python java set

9
推荐指数
2
解决办法
5873
查看次数

使用正则表达式舍入

是否可以使用正则表达式对数字进行舍入?问题是我在文件中有大量超过2位小数的数字,我需要将它们移动到2位小数.

它在源文件中,所以理想情况下我想使用Visual Studio的查找和替换,但我不反对编写脚本来运行文件(将其视为纯文本),如果正则表达式没有答案.

regex decimal

8
推荐指数
2
解决办法
8039
查看次数

json.encoder.FLOAT_REPR 改变但没有效果

我试图让我的 JSON 编码器转储浮点数只有 2 个十进制精度。所以'2.241'变成'2.24'

我在Alex Martelli 的这个答案中读到,您可以覆盖 json.encoder 的默认 FLOAT_REPR。我尝试了以下方法:

>>> import json
>>> json.encoder.FLOAT_REPR = lambda o: format(o, '.2f')
Run Code Online (Sandbox Code Playgroud)

但我没有得到相同的结果:

>>> json.dumps(2.241)
'2.241'
Run Code Online (Sandbox Code Playgroud)

我什至可以验证 FLOAT_REPR 是否已更改:

>>> print json.encoder.FLOAT_REPR
<function <lambda> at 0xb....>
Run Code Online (Sandbox Code Playgroud)

并按预期工作:

>>> json.encoder.FLOAT_REPR(2.241)
2.24
Run Code Online (Sandbox Code Playgroud)

为什么内置 JSON 模块不使用 FLOAT_REPR 当我看到它已被覆盖并且解决方案应该根据 Alex Martelli 工作?

我已经在两台不同的计算机上对此进行了测试,它们都在 Ubuntu 14.0.4 上运行 Python 2.7.6。

python precision limit

6
推荐指数
1
解决办法
2483
查看次数

将二维列表写入 JSON 文件

我有一个二维列表,如:

data = [[1,2,3], [2,3,4], [4,5,6]]
Run Code Online (Sandbox Code Playgroud)

我想像这样将它写入 JSON 文件:

{
    'data':[
        [1,2,3],
        [2,3,4],
        [4,5,6]
    ]
}
Run Code Online (Sandbox Code Playgroud)

我得到这个json.dumps(data, indent=4, sort_keys=True)

{
    'data':[
        [
         1,
         2,
         3
        ],
        [
         2,
         3,
         4
        ],
        [
         4,
         5,
         6]
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是另一个问题如何在使用 JSON 模块进行漂亮打印时实现自定义缩进?,但那是字典。

python json

4
推荐指数
1
解决办法
6712
查看次数

标签 统计

python ×4

json ×2

decimal ×1

floating-point ×1

formatting ×1

java ×1

limit ×1

precision ×1

regex ×1

set ×1