我有这样的功能结果:
{
"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"
}
答案 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]