打印键名及其值

时间:2015-01-04 18:26:09

标签: python dictionary

我有一个声明打印一个与化学品及其所需键值相关的字符串,如何打印键值对应的键名?

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 

2 个答案:

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