【问题标题】:Formatting Dictionary Within Object in Python在 Python 中的对象内格式化字典
【发布时间】:2014-05-16 19:40:21
【问题描述】:

我有一段代码创建了一个字典Enzyme_dict,然后用对象填充该字典(来自class Enzyme)。该类对象的一个​​属性本身就是一个字典 (self._specif)。构成该属性的字典中填充了几个值,都等于1.0/5。由于机器精度,这个值被打印为0.20000000000000001,这使得打印包含许多这些值的字典变得不可读。

我希望能够编写print Enzyme_dict 并让它将所有机器舍入的浮点值打印为.200 或其他东西,而不是笨拙的0.20000000000000001。我怎样才能做到这一点?

当我尝试使用%.3f 格式化类本身内的__repr__ 输出时,它告诉我我不能这样做,因为我试图将字典格式化为浮点数(这是有道理的)。我还想将那些我试图截断的值保留为浮点数,而不是将它们转换为字符串。

我正在运行 python 2.6.6。感谢您的帮助!

import random
random.seed(5)

numb_unique_chem = 10
numb_rxns = 10
numb_sub = 2
numb_prod = 2
E_pool_size_initial = 3 
numb_rxns_cat_initial = 5

class Enzyme(object):
    def __init__(self,rxns_cat,specif):
        self._rxns_cat = rxns_cat   
        self._specif = specif       
    def __repr__(self):
        return "Rxns catalyzed: %s, Specificity: %s \n" %(self._rxns_cat, self._specif)

Enzyme_dict = {}

R_pool_size = 10 # Rxn pool size, dictated by the input above
for ID in range(E_pool_size_initial):
    Enzyme_dict[ID] = Enzyme([],{}) 
    Enzyme_dict[ID]._rxns_cat = random.sample([n for n in range(10)],numb_rxns_cat_initial)

    Enzyme_dict[ID]._specif = {}
    for i in Enzyme_dict[ID]._rxns_cat:
        Enzyme_dict[ID]._specif[i] = (1.0/len(Enzyme_dict[ID]._rxns_cat))

print Enzyme_dict

【问题讨论】:

标签: python dictionary formatting python-2.6 truncate


【解决方案1】:

正如 OdraEncoded 建议的那样,您可以简单地调整您的 repr() 方法以打印以下内容:

def __repr__(self):
        return "Rxns catalyzed: %s, Specificity: %s \n" %(self._rxns_cat, ['%.3f' % spec for spec in self._specif])

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2011-02-14
    • 1970-01-01
    • 2018-05-24
    • 2013-01-16
    • 1970-01-01
    • 2021-05-30
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多