【发布时间】: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
【问题讨论】:
-
为什么不直接遍历字典
.items()并自己格式化和打印每个键/值对? -
您不想将 dictionary 格式化为 3 d.p。
float,您希望以这种方式格式化其 值。另外,__repr__不应该那样使用,使用__str__- 见stackoverflow.com/questions/1436703/… -
我无法在 python 2.7.6 中重现它:
python -c 'print repr(1.0/5)'打印0.2。升级是一种选择吗? (我强烈推荐它,2.7.6 是一个巨大的改进。)您也可以尝试round(1.0/len(Enzyme_dict[ID]._rxns_cat), 3) -
@OdraEncoded 我想我没有一个好的答案,除了我在寻找简单的事实。
标签: python dictionary formatting python-2.6 truncate