每当我提供__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
是字典的名称
答案 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())