如何使用__str__打印字典中存储的数据
如何在使用print
命令时使用__str__
打印字典存储的数据。我使用:如何使用__str__打印字典中存储的数据
def __str__(self):
for atom in self.pdb_atoms().keys():
return '%s'%self.pdb_atoms()[atom]
如果我有蟒蛇,其指数有一个字符串和类似{ 'CA' 56: 'ATOM 727 HG2 57 -7.010000 11.418000 -23.532000'....}
一个整数字典但是这给了我相应于一个键而不是整个列表数据;这会从1344行列表中只打印727行。我不知道我在哪里出错。 pdb_atoms
是该字典的名称
您看到了问题,因为您在构造整个列表之前从函数调用返回。请尝试以下方法返回整个词典:
def __str__(self):
return ''.join([self.pdb_atoms()[atom] for atom in self.pdb_atoms().keys()])
此外,请注意你怎么能直接使用字符串对象,而不必做'%s'%(string)
编辑: 作为@Wooble在评论中指出,可以不要调用字典对象。我假设你的意思是pdb_atoms是一个返回字典的命令。如果不是,请删除()
。
def __str __(self): 返回'%s'%self.pdb_atoms()[atom] for self._pdb_atoms.keys()表示无效语法指向“for” – user1455828
您使用的是什么版本的Python? – Dhara
第二,为什么你使用'return'%s'%' – Dhara
如果你想与所有换行分隔值的字符串尝试是这样的:
def __str__(self):
return '\n'.join(self.pdb_atoms())
TypeError:序列项目0:期望的字符串,找到的实例 – user1455828
''\ n'。join(map(str,self.pdb_atoms()))' –
...请注意,这将返回*键*,而不是值 –
你觉得这可能意味着有一个循环return
? __str__
必须返回一个字符串。如果你的函数按照你的预期工作,它会为每个原子返回一个字符串......然后呢?如何让Python知道如何将这些字符串合并为一个字符串,而不用告诉它?有很多方法将字符串粘合在一起,这甚至不是一种很有可能的方式来解释多次返回的函数(如果它返回数字呢?)。
事实上,函数只能返回一次,这是几乎所有我能想到的语言(逻辑编程语言除外)的基本属性。因此,如果将return
放入循环中,所发生的一切就是函数在循环的第一次迭代中返回并完成。这正是为什么你的功能只显示你第一个键!
有些东西有点像return
,可以使用多次:yield
。实际上,这可以让你作为一个迭代器返回多个值(你可以循环使用一次只有,使用for
循环将它们重新取回)。但是这对你没有帮助,因为__str__
应该返回一个字符串,并且包含多个字符串的迭代器不是一个字符串!
def __str__(self):
return '\n'.join(str(v) for v in self.pdb_atoms().itervalues())
如果'pdb_atoms'确实是一个字典,你应该得到一个关于它不可调用的错误消息,而不是单个元素。 – geoffspear
我认为这是一个返回字典的命令 – Dhara