我有一个字典列表:
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}]
我有一个字典列表:
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}]
列表组合将执行以下操作:
['{{{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}]
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 }
您可以使用列表理解和字符串格式:
>>> 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}']
新式格式需要{{}}
转义 a {}
,因此在这种情况下可读性较差。另一种选择是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}]