辞書の値を四捨五入するのに苦労しています。私が持っているのは、次のような辞書のリストです。
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 内包表記を使用していません。まず、元のすべての辞書のすべてのキー、値をループするのに苦労しています。第二に、この結果は、関数内で出力するときに小数点が 2 ではなく 1 つしかありませんか? 第三に、「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}]
URL:
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
(この値は、後でスクリプトを実行したものです)