2014-09-26 69 views
0

我尝试创建类,它将返回值漂亮打印。 我发现这个职位python __str__ for an object 但我仍然不明白我怎么能提高我的班级。返回键和值字典从列表使用__str__

这里是我的类:

class PrintList(): 
    def __init__(self,lista): 
     self.lista=lista 
    def __str__(self): 
     if isinstance(x[0] in self.lista, dict):   #for dicts in list 
      return ','.join(str(item),'->',str(item[x]) for x in item) for item in self.lista 
     else:   # for variables in list 
      return ','.join(str(x) for x in self.lista) 

和bug在第一回:

return ','.join(str(item),'->',str(item[x]) for x in item) for item in self.lista 
                   ^
SyntaxError: invalid syntax 

我试图得到以下结果: key_dict-> value_dict等

回答

3

你肯定在理解/生成器表达式中有无效的语法。

你应该有书面表达如下

return ','.join("{}->{}".format(item, item[x]) for x in item for item in self.lista) 

Offtopic

至于@MartijnPieter,为str.join,其更快地使用列表理解,而不是一台发电机的表达显着,因为它需要在拼接之前生成数据(两遍算法)。请参考list comprehension without [ ], Python

+1

我会使用列表理解而不是生成器表达式; 'str.join()'*更快*。参见[list comprehension without \ [\],Python](http://stackoverflow.com/a/9061024) – 2014-09-26 08:54:16

+0

@MartijnPieters:我知道。我只是使用与OP相同的格式,而没有引入新的概念或脱离主题。如果你看到,OP已经使用了一个生成器表达式,并且我认为将它转换为列表并不合适。 – Abhijit 2014-09-26 08:57:25

+0

*耸肩*。我会添加一个额外的段落,解释列表符合在这里是更好的选择,并链接到雷蒙德的答案,就是这样。 :-) – 2014-09-26 08:59:29