1
我有一段代碼創建了一個字典Enzyme_dict
,然後用對象填充字典(來自class Enzyme
)。該類對象的屬性之一本身就是一個字典(self._specif
)。構成該屬性的字典填充了多個值,全部等於1.0/5
。由於機器的精度,這個值被打印爲0.20000000000000001
,這使得打印字典中的許多這些值是不可讀的。在Python中的對象中格式化字典
我希望能寫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()'和格式,並打印迭代每個鍵/值對都是你自己的? – OdraEncoded
你不想格式化*字典*爲3 d.p. 'float',你想以這種方式格式化*值*。此外,'__repr__'不應該像那樣使用,使用'__str__' - 請參閱http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python – jonrsharpe
我無法重現它在Python 2.7.6中:'python -c'print repr(1.0/5)''打印'0.2'。升級選項? (我強烈推薦它,2.7.6是一個巨大的改進。)你也可以嘗試'循環(1.0/len(Enzyme_dict [ID] ._ rxns_cat),3)' –