字典中的浮点数取整

7

我在尝试对字典中的浮点数进行四舍五入。生成该字典的代码如下:

[{i: x.count(i)/float(len(x)) for i in x} for x in l]

我的字典是:

P = [{'A': 0.700000000, 'B': 0.255555555}, {'B': 0.55555555, 'C': 0.55555555}, {'A': 0.255555555, 'B': 0.210000000, 'C': 0.2400000000}]

我需要:

P = [{'A': 0.70, 'B': 0.25}, {'B': 0.55, 'C': 0.55}, {'A': 0.25, 'B': 0.21, 'C': 0.24}]

5
你考虑过使用 round 吗?已经有很多关于舍入浮点数的问答了,你认为在字典中使用会有什么不同吗?另外,为什么要标记两个不同的版本 - 你实际上使用哪个版本? - jonrsharpe
3个回答

14

这是一个相当简单的方法。但是,.7000将变成.7。

四舍五入

for dict_value in P:
        for k, v in dict_value.items():
            dict_value[k] = round(v, 2)

[{'A': 0.7, 'B': 0.26}, {'C': 0.56, 'B': 0.56}, {'A': 0.26, 'C': 0.24, 'B': 0.21}]

截断

for dict_value in P:
    for k, v in dict_value.items():
        dict_value[k] = float(str(v)[:4])
[{'A': 0.7, 'B': 0.25}, {'C': 0.55, 'B': 0.55}, {'A': 0.25, 'C': 0.24, 'B': 0.21}]

将数字转换为字符串时,会去掉0.700000中多余的0,这就是为什么它显示为0.7而不是0.70


1
而你得到的是 0.56 而不是 0.55 - jonrsharpe
这是四舍五入,而不是真正的截断多余的数字。如果这是你想要的,你需要稍微修改代码来实现。 - Jared Mackey
我知道,注意我不是原帖作者。 - jonrsharpe
哎呀,我甚至都没看 :) - Jared Mackey
在 OP 的数据集中 float(str(v)[:4]) 是有效的,但通常情况下,对于大于 10 的值将会失败。你可以使用 v = (int(v*100))/100.0 将多余的数字截断。 - Ashwani Agarwal

1
我们可以为简洁而牺牲一些易读性:
[{k: round(v, 2) for k, v in dct.items()} for dct in P]

0

您可以先将其转换为数据框,然后对其进行四舍五入:

pd.DataFrame([dct]).round(2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接