字典列表 - 如何格式化打印输出

时间:2013-08-12 10:26:47

标签: python

我有一个词典列表:

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}]

3 个答案:

答案 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}]

格式化字符串的替代方法,以避免过多的{{}}卷曲括号转出:

  • 使用旧式%格式:

    '{%(score)s-%(numrep)s}' % d
    
  • 使用string.Template()对象:

    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 :(得分: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 }

答案 2 :(得分: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}]