我有一个声明打印一个与化学品及其所需键值相关的字符串,如何打印键值对应的键名?
def chemByString(chemName,chemicals,priority="echo"):
for chemical in chemicals:
chemDict = chemical.toDict(priority)
if chemDict["chemicalName"] == chemName
return chemical
return None
print str(chemByString('O2', allChemicals, priority="echo").chemicalName) + str("{chemicalName:<5s} {charge:<20s}{comment:<20s}".format(**chemByString('O2', allChemicals, priority="echo").toDict()))
输出:
{'tv': 'O2', 'echo': 'O2'} O2 0 O2
期望的输出:
{'tv': 'O2', 'echo': 'O2'} O2 Charge 0 Comment O2
或
Species Charge Comment
{'tv': 'O2', 'echo': 'O2'} O2 0 O2
答案 0 :(得分:0)
您可以使用字符串格式...
提供它们>>> print str(chemByString('O2', allChemicals, priority="echo").chemicalName) + str("speciesName: {speciesName:<5s} charge: {charge:<20s} comment: {comment:<20s}".format(**chemByString('O2', allChemicals, priority="echo").toDict()))
{'tv': 'O2', 'echo': 'O2'} speciesName: O2 charge: 0 comment: O2
应该让你到达目的地。
编辑:如果你有一些完全通用的东西,你想要申请所有成员,你可能会做一些奇怪的事情,比如:
>>> d = {'foo': 4, 'bar': 6}
>>> '{}: %s, {}: %s'.format(*d.keys()) % tuple(d.values())
'foo: 4, bar: 6'
尽管如此,这并不像特殊情况那样直观。
您也可以在课程上创建一个__repr__
方法,因此您可以将其打印出来,就像您想要打印一样。请参阅:Purpose of Python's __repr__
答案 1 :(得分:0)
您可以使用getattr()中的list comprehension来使用属性列表打印对象属性:
properties = ('chemicalName', 'speciesName', 'charge', 'comments')
template = '{0:<20s} {1:<5s} {2:<20s} {3:<20s}'
chem = chemByString('O2', allChemicals, priority="echo")
print template.format(*properties)
print template.format(*[str(getattr(chem, p)) for p in properties])