如何使用__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是该字典的名称

+0

如果'pdb_atoms'确实是一个字典,你应该得到一个关于它不可调用的错误消息,而不是单个元素。 – geoffspear

+1

我认为这是一个返回字典的命令 – Dhara

您看到了问题,因为您在构造整个列表之前从函数调用返回。请尝试以下方法返回整个词典:

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

此外,请注意你怎么能直接使用字符串对象,而不必做'%s'%(string)

编辑: 作为@Wooble在评论中指出,可以不要调用字典对象。我假设你的意思是pdb_atoms是一个返回字典的命令。如果不是,请删除()

+0

def __str __(self): 返回'%s'%self.pdb_atoms()[atom] for self._pdb_atoms.keys()表示无效语法指向“for” – user1455828

+0

您使用的是什么版本的Python? – Dhara

+0

第二,为什么你使用'return'%s'%' – Dhara

如果你想与所有换行分隔值的字符串尝试是这样的:

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

TypeError:序列项目0:期望的字符串,找到的实例 – user1455828

+1

''\ n'。join(map(str,self.pdb_atoms()))' –

+0

...请注意,这将返回*键*,而不是值 –

你觉得这可能意味着有一个循环return__str__必须返回一个字符串。如果你的函数按照你的预期工作,它会为每个原子返回一个字符串......然后呢?如何让Python知道如何将这些字符串合并为一个字符串,而不用告诉它?有很多方法将字符串粘合在一起,这甚至不是一种很有可能的方式来解释多次返回的函数(如果它返回数字呢?)。

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

有些东西有点像return,可以使用多次:yield。实际上,这可以让你作为一个迭代器返回多个值(你可以循环使用一次只有,使用for循环将它们重新取回)。但是这对你没有帮助,因为__str__应该返回一个字符串,并且包含多个字符串的迭代器不是一个字符串!

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