如何使用__str__在字典中打印存储的数据

时间:2012-06-14 18:44:40

标签: python

每当我提供__str__命令时,如何使用print打印字典存储数据。我正在使用:

def __str__(self):
    for atom in self.pdb_atoms().keys():
        return '%s'%self.pdb_atoms()[atom]

如果我在python中有一个字典,其索引有一个字符串和一个像{ 'CA' 56: 'ATOM 727 HG2 57 -7.010000 11.418000 -23.532000'....}

这样的整数

但是这给了我对应单个键而不是整个列表的数据;这仅打印1344行列表中的第727行。我不知道哪里出错了。 pdb_atoms是字典的名称

4 个答案:

答案 0 :(得分:1)

您认为循环中return可能意味着什么? __str__必须返回一个字符串。如果你的函数按预期工作,它会为每个原子返回一个字符串......那么什么? Python如何知道如何在不告诉它的情况下将它们组合成一个字符串?有许多方法将字符串粘合在一起,这甚至不是一种很可能的方式来解释多次返回的函数(如果返回数字会怎么样?)。

实际上,函数只能返回一次,这是我能想到的几乎所有语言的基本属性(逻辑编程语言除外)。因此,如果将return放在循环中,那么所有发生的事情都是函数在循环的第一次迭代时返回并完成。这正是您的功能只显示第一个键的原因!

有点像return的内容可以多次使用:yield。实际上,这允许您将多个值作为迭代器返回(您可以使用for循环遍历一次以使其再次返回)。但是这对你没有帮助,因为__str__应该返回一个字符串,而包含多个字符串的迭代器不是字符串!

答案 1 :(得分:0)

您会看到问题,因为您在构建整个列表之前从函数调用返回。请尝试以下操作返回整个字典:

def __str__(self):
    return ''.join([self.pdb_atoms()[atom] for atom in self.pdb_atoms().keys()])

另外,请注意如何直接使用字符串对象而无需执行'%s'%(string)

编辑: 正如@Wooble在评论中指出的那样,你无法调用字典对象。我假设你的意思是pdb_atoms是一个返回字典的命令。如果没有,请删除()

答案 2 :(得分:0)

如果你想要一个字符串,其中所有的值都用换行符分隔,请尝试以下方法:

def __str__(self):
    return '\n'.join(self.pdb_atoms())

答案 3 :(得分:0)

def __str__(self):
    return '\n'.join(str(v) for v in self.pdb_atoms().itervalues())