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

  • 本文关键字:str 方法 字典 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}"

也许你想要一个dict子类:

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

考虑在 Python 2 中使用 iteritems

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其位置参数。

这种方法可能会有所帮助。而不是像下面那样直接分配"t"。

>>> dict['object'] = t

您可以对其进行类型转换,然后将其保存到字典中。喜欢这个

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

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

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

如果你不介意迭代字典,我们可以写一个 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

如果您希望字典包含其他字典作为值,我们可能会使函数递归。

最新更新