我很难在字典中四舍五入。我所拥有的是这样的字典列表:
y = [{'a': 80.0, 'b': 0.0786235, 'c': 10.0, 'd': 10.6742903}, {'a': 80.73246, 'b': 0.0, 'c':
10.780323, 'd': 10.0}, {'a': 80.7239, 'b': 0.7823640, 'c': 10.0, 'd': 10.0}, {'a':
80.7802313217234, 'b': 0.0, 'c': 10.0, 'd': 10.9762304}]
我需要将值四舍五入到小数点后 2 位。
当我尝试以下操作时:
def roundingVals_toTwoDeci(y):
for d in y:
for k, v in d.items():
v = ceil(v*100)/100.0
print v
d[k] = v
return
roundingVals_toTwoDeci(y)
s = json.dumps(y)
print s
我得到:
0.0
0.0
18.2
0.0
27.3
54.5
0.0
0.0
0.0
[{"a": 0.0, "b": 0.0, "c": 27.300000000000001, "d": 0.0, "e": 54.5, "f": 0.0, "g": 18.199999999999999, "h": 0.0, "i": 0.0}]
我需要使用 2.4+ 版本进行这项工作,因此不使用 dict 理解。首先,我很难遍历原始所有字典中的所有键和值。其次,这个结果在函数内部打印时只有 1 个小数点而不是 2 个小数点?第三,为什么“json.dumps”和“print”没有显示函数内部的值?
编辑:
使用下面的@Mark Ransom 的答案,我得到了所需的 o/p。但是,我必须对json.dumps
值进行 urlencode 并将其发送到 URL。在 URL 处,它将值解码为所有小数位。因此,例如,如果josn.dumps
给出 {"a": 9.1},则 URL 将其(在 urlencode 之后)显示为9.10034254344365
. 修改后的代码如下:
class LessPrecise(float):
def __repr__(self):
return str(self)
def roundingVals_toTwoDeci(y):
for d in y:
for k, v in d.items():
v = LessPrecise(round(v, 2))
print v
d[k] = v
roundingVals_toTwoDeci(y)
j = json.dumps(y)
print j
params = urllib.urlencode({'thekey': j})
print json.dumps
{"a": 9.1}
在 URL 之后给出urlencode
,9.1078667322034
而不是9.1
如下所示:
输出:::
100.0
0.0
0.0
0.0
100.0
0.0
0.0
0.0
81.8
0.0
18.2
0.0
90.0
0.0
0.0
10.0
[{"a": 100.0, "b": 0.0, "c": 0.0, "d": 0.0}, {"a": 100.0, "b": 0.0, "c": 0.0, "d": 0.0}, {"a":
81.8, "b": 0.0, "c": 18.2, "d": 0.0}, {"a": 90.0, "b": 0.0, "c": 0.0, "d": 10.0}]
在网址:
9.100000381469727
json.dumps() 之后的 JSON 字符串
[{"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 100.0, "b": 0.0, "c": 0.0, "d": 0.0}, {"a":
80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 90.0, "b": 0.0, "c": 0.0, "d": 10.0}]
urlencode 字符串 - 在http://meyerweb.com/eric/tools/dencoder/解码后
thekey=[{"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 100.0, "b": 0.0, "c": 0.0, "d":
0.0}, {"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 90.0, "b": 0.0, "c": 0.0, "d": 10.0}]
在 URL 处,我得到如下值18.200000762939453
(此值来自稍后的脚本运行)