2013-08-12 78 views
1

格式化我的詞典列表:名單詞典 - 如何打印輸出

lis = [{'score': 7, 'numrep': 0}, {'score': 2, 'numrep': 0}, {'score': 9, 'numrep': 0}, {'score': 2, 'numrep': 0}] 

我如何格式化print函數的輸出:

print(lis) 

所以我會得到什麼樣:

[{7-0}, {2-0}, {9-0}, {2-0}] 

回答

2

列表比較會做:

['{{{0[score]}-{0[numrep]}}}'.format(d) for d in lst] 

此輸出字符串列表,所以報價:

['{7-0}', '{2-0}', '{9-0}', '{2-0}'] 

我們可以格式化多一點:

'[{}]'.format(', '.join(['{{{0[score]}-{0[numrep]}}}'.format(d) for d in lst])) 

演示:

>>> print ['{{{0[score]}-{0[numrep]}}}'.format(d) for d in lst] 
['{7-0}', '{2-0}', '{9-0}', '{2-0}'] 
>>> print '[{}]'.format(', '.join(['{{{0[score]}-{0[numrep]}}}'.format(d) for d in lst])) 
[{7-0}, {2-0}, {9-0}, {2-0}] 

替代格式化字符串以避免過多的方法已經{{}}捲曲括號轉義:

  • 使用舊式%格式:使用string.Template()對象

    '{%(score)s-%(numrep)s}' % d 
    
  • from string import Template 
    
    f = Template('{$score-$numrep}') 
    
    f.substitute(d) 
    

進一步演示:

>>> print '[{}]'.format(', '.join(['{%(score)s-%(numrep)s}' % d for d in lst])) 
[{7-0}, {2-0}, {9-0}, {2-0}] 
>>> from string import Template 
>>> f = Template('{$score-$numrep}') 
>>> print '[{}]'.format(', '.join([f.substitute(d) for d in lst])) 
[{7-0}, {2-0}, {9-0}, {2-0}] 
1

您可以使用列表理解和string formatting

>>> lis = [{'score': 7, 'numrep': 0}, {'score': 2, 'numrep': 0}, {'score': 9, 'numrep': 0}, {'score': 2, 'numrep': 0}] 
>>> ["{{{score}-{numrep}}}".format(**dic) for dic in lis] 
['{7-0}', '{2-0}', '{9-0}', '{2-0}'] 

新樣式格式要求{{}}逃脫{},所以它的這種情況有點不太可讀。另一種選擇是string.Template,它允許$作爲佔位的鍵,以便該解決方案是在這種情況下:

>>> from string import Template 
>>> s = Template('{$score-$numrep}') 
>>> [s.substitute(dic) for dic in lis] 
['{7-0}', '{2-0}', '{9-0}', '{2-0}'] 

如果不是字符串列表,你需要一個字符串更可讀,那就試試這個:

>>> from string import Template 
>>> s = Template('{$score-$numrep}') 
>>> print '[{}]'.format(', '.join(s.substitute(dic) for dic in lis)) 
[{7-0}, {2-0}, {9-0}, {2-0}] 
2
l = [ 
    {'score': 7, 'numrep': 0}, 
    {'score': 2, 'numrep': 0}, 
    {'score': 9, 'numrep': 0}, 
    {'score': 2, 'numrep': 0} 
] 

keys = ['score', 'numrep'] 
print ",".join([ '{ %d-%d }' % tuple(ll[k] for k in keys) for ll in l ]) 

輸出:

{ 7-0 },{ 2-0 },{ 9-0 },{ 2-0 } 
+1

'dict.values'的順序是任意的。 –

+0

@AshwiniChaudhary,哦對!已更新 – perreal

+1

刪除了-1。仍然''{%(score)s - %(numrep)s''%ll'比你想要做的更好。 –