打印密钥名称及其值

2024-09-30 22:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个语句,它打印一个字符串,与一种化学物质及其所需的键值有关,如何打印键值对应的键名?你知道吗

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 

Tags: echoreturntv键值priorityo2strtodict
2条回答

可以使用list comprehension中的getattr()使用属性列表打印对象属性:

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

您可以以字符串格式提供它们

>>> 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__

相关问题 更多 >