這是一個代碼,可以做你想做的,AFAIU。
這很大程度上是人造的,因爲它只適用於精確詞典的形狀。
但是,我確定這是一個可以改進的基礎,以考慮其他規範,例如每個元組中的幾個Decimal實例。
from decimal import Decimal
rates = {3: [(( 500, 999), Decimal('23425.008'), Decimal(' 4.24245'))],
281: [(( 0, 10), Decimal('4563.00'), Decimal(' 34.00' )),
(( 3510, 500), Decimal(' 578' ), Decimal(' 464.503' )),
((174500, 19), Decimal(' 68.2' ), Decimal('5734' ))],
54: [((93500, 99999), Decimal(' 1564.44'), Decimal(' 75.60' ))]}
def complex_display(di):
K,I1,I2,D1B,D1P,D2B,D2P = [],[],[],[],[],[],[]
for key,val in di.iteritems():
K.append(len(str(key)))
for (i,j),d1,d2 in val :
I1.append(len(str(i)))
I2.append(len(str(j)))
d1b,d1p = str(d1).split('.') if '.' in str(d1) else (str(d1),'.')
d2b,d2p = str(d2).split('.') if '.' in str(d2) else (str(d2),'.')
D1B.append(len(d1b))
D1P.append(len(d1p))
D2B.append(len(d2b))
D2P.append(len(d2p))
k = '%%%dd: [' % max(K)
fv = "%%s((%%%ds, %%%ds), Decimal('%%%ds.%%-%ds'), Decimal('%%%ds.%%-%ds'))%%s" % (max(I1),max(I2),max(D1B),max(D1P),max(D2B),max(D2P))
def produce(di):
for key,val in sorted(di.iteritems()):
for n,((i,j),d1,d2) in enumerate(val) :
d1b,d1p = str(d1).split('.') if '.' in str(d1) else (str(d1)[0:-2],"")
d2b,d2p = str(d2).split('.') if '.' in str(d2) else (str(d2)[0:-2],"")
yield fv % (' ' if n else k % key,i,j,d1b,d1p,d2b,d2p,']' if n+1==len(val) else '')
return '\n'.join(produce(di))
結果
3: [(( 500, 999), Decimal('23425.008'), Decimal(' 4.24245'))]
54: [((93500, 99999), Decimal(' 1564.44 '), Decimal(' 75.60 '))]
281: [(( 0, 10), Decimal(' 4563.00 '), Decimal(' 34.00 '))
(( 3510, 500), Decimal(' 5. '), Decimal(' 464.503 '))
((174500, 19), Decimal(' 68.2 '), Decimal(' 57. '))]
有沒有兩個字符「{」和「}」,這是一個很大的更多的複雜性增加他們微弱的結果。我讓你完成代碼來添加它們,如果你想
結果是按照鍵排序。
['pprint.pprint'](http://docs.python.org/library/pprint.html#pprint.pprint)會將'dict'分成像這樣的行,但它不會執行任何操作的數字對齊(這就是爲什麼這是一個評論,而不是答案)。我想你必須寫一些自定義的東西來做到這一點。 – agf
IMO,這種東西從來沒有屬於Python代碼(它是表格數據,而不是表格代碼)。所以即使你「漂亮」,它仍然是醜陋的。從文件加載它。 – wim
通常我會同意「不屬於python代碼」的情緒。問題是數據的結構完全是臨時的,並且與使用數據的代碼高度耦合;因爲我只是在實施其他人制定的規則(實際上有很多其他人),所以我無法對這種特殊性做任何事情。因此,任何外部格式都必須在功能方面接近實際的Python代碼,並且幾乎不可能理解數據而不參考使用它的代碼。 – mithrandi