明智地删除" .0"来自浮动输出

时间:2015-04-10 09:58:46

标签: python json int

我有这样的功能结果:

{
    "id": "7418", 
    "name": "7.5"
}, 
{
    "id": "7419", 
    "name": "8.0"
}, 
{
    "id": "7420", 
    "name": "8.5"
}, 
{
    "id": "7429", 
    "name": "9.0"
}, 

我做的很简单:

[{'id': opt['size'], 'name': '{}'.format(float(opt['value']))} for opt in options]

我不想替换".0",我对如何正确转换数据感兴趣:

{
    "id": "7429", 
    "name": "9"
}

4 个答案:

答案 0 :(得分:2)

使用.15g

格式化您的号码
>>> format(555.123, '.15g')
555.123
>>> format(5.0, '.15g')
5

虽然它会使用接近于零的数字的科学指数格式:

>>> format(0.00001, '.16g')
1e-05

以及小数点前16位数的数字。

请注意,您无需使用'{}'.format();上面的format内置函数在这里效果更好。

答案 1 :(得分:1)

由于name的类型值为String,因此我们也可以使用拆分方法

演示

input_list = [{'id': '7418', 'name': '7.5'}, {'id': '7419', 'name': '8.0'}, {'id': '7420', 'name': '8.5'}, {'id': '7429', 'name': '9.0'}]

result = []

for i in input_list:
    # Split by .
    tmp = i["name"].split(".")
    try:
        #- Type casting.
        tmp1 = int(tmp[1])
    except IndexError:
        result.apend({"id":i["id"], "name":i["name"]})
        continue
    except ValueError:
        print "Value exception, Check input:-", i
        continue

    #- Check after decimal number is equal to 0 or not.
    if tmp1==0:
        val = tmp[0]
    else:
        val = i["name"]
    result.append({"id":i["id"], "name":val})


print "Result:-", result

<强>输出:

Result:- [{'id': '7418', 'name': '7.5'}, {'id': '7419', 'name': '8'}, {'id': '7420', 'name': '8.5'}, {'id': '7429', 'name': '9'}]

答案 2 :(得分:1)

如果您只想将仅代表整数的float个对象转换为int(即将9.0转换为9,但请{{1}就像它一样),你可以用float.is_integer来检查:

9.5

或者,如果要将转换应用于字符串(即不将JSON转换为Python对象),则可以使用正则表达式(see demo):

>>> numbers = [1.0, 1.2, 1.4, 1.6, 1.8, 2.0]
>>> numbers = map(lambda f: int(f) if f.is_integer() else f, numbers)
>>> numbers
[1, 1.2, 1.4, 1.6, 1.8, 2]
>>> map(type, numbers)
[<type 'int'>, <type 'float'>, <type 'float'>, <type 'float'>, <type 'float'>, <type 'int'>]

再次注意,>>> import re >>> data = """ { "id": "7418", "name": "7.5" }, { "id": "7419", "name": "8.0" }, """ >>> print re.sub(r'"(\d+)\.0"', r'"\1"', data) { "id": "7418", "name": "7.5" }, { "id": "7419", "name": "8" }, 未受影响,但"7.5"已替换为"8.0"

答案 3 :(得分:0)

好吧,如果那是一个词典列表:

[{'id': i['id'], 'name': ['{:.1f}', '{:.0f}'][float(i['name']).is_integer()].format(float(i['name']))} for i in your_list]