对字典的所有值使用'str'方法

时间:2018-12-24 05:13:10

标签: python

我有一个字典,该字典在其值中包含对象。我想在字典上使用str函数,以便它将在字典中的所有其他对象上递归运行。

例如,我有以下对象:

>>> class Temp(object):
...     def __init__(self):
...         self._item = 8
...     def __str__(self):
...         return str(self._item)
... 
>>> t = Temp()
>>> str(t)
'8'

我创建一个字典并将对象放入其中:

>>> dict = {}
>>> dict['object'] = t

现在,当我在字典上使用str函数时,我得到以下信息:

>>> str(dict)
"{'object': <__main__.Temp object at 0x7fa08889f910>}"

但是我想得到这个:

>>> str(dict)
"{'object': 8}"

4 个答案:

答案 0 :(得分:6)

也许您想要一个dict子类:

class strdict(dict):
  def __str__(self):
    return "{%s}"%', '.join("%r: %s"%p for p in self.items())

考虑在Python 2中使用iteritems

答案 1 :(得分:3)

与大多数其他内置容器类一样,

dict在对对象进行字符串化时使用对象的__repr__。丢失的__str__将故障转移到__repr__,反之则不成立:__repr__不会故障转移到__str__

获得所需结果的最简单方法是将__str__重命名为__repr__

class Temp(object):
    def __init__(self):
        self._item = 8
    def __repr__(self):
        return str(self._item)

print({'object': Temp()})

产生

{'object': 8}

同时,由于故障转移,正常的字符串表示形式将与以前相同:

print(Temp())

产生

8

请记住,print会在其位置参数上调用str

答案 2 :(得分:0)

这种方法可能会有所帮助。不必像下面那样直接分配“ t”。

>>> dict['object'] = t

您可以键入它,然后将其保存到词典中。像这样

>>> dict['object'] = str(t)

然后,词典将具有您需要的值。

>>> str(dict)
"{'object': '8'}"

答案 3 :(得分:0)

如果您不介意遍历该字典,我们可以用str代替:

def nerez_str(d):
  new_d = {}
  for k, v in d.items():
    new_d[str(k)] = str(v)
  return new_d

现在,不要在您的字典上调用str,而是将其传递给nerez_str

如果您希望字典包含其他字典作为值,则可以使函数递归。