【问题标题】:Convert empty dictionary to empty string将空字典转换为空字符串
【发布时间】:2016-05-25 04:46:53
【问题描述】:
>>> d = {}
>>> s = str(d)
>>> print s
{}

我需要一个空字符串。

【问题讨论】:

  • 我很好奇为什么这个问题有 500 rep 的赏金。
  • @LeoCHan:​​​​​​​​​​​​​​我很好奇为什么你的评论(现在)也得到了 9 票:P。无论如何,the answer is that I want to be a 10ker.

标签: python string dictionary


【解决方案1】:

由于空字典是False,你可以用下面的最短方法来做,通过Boolean Operators来做。

>>> d = {}
>>> str(d or '')
''

或者没有str

>>> d = {}
>>> d or ''
''

如果d 不是空字典,则使用str() 将其转换为字符串

>>> d['f'] = 12
>>> str(d or '')
"{'f': 12}"

【讨论】:

    【解决方案2】:

    当您尝试将空的 dict 对象转换为 bool 对象时,它是 False。但如果里面有东西,那就是True。像空列表、空字符串、空集和其他对象:

    >>> d = {}
    >>> d
    {}
    >>> bool(d)
    False
    >>> d['foo'] = 'bar' 
    >>> bool(d)
    True
    

    所以很简单:

    >>> s = str(d) if d else ''
    >>> s
    "{'foo': 'bar'}"
    >>> d = {}
    >>> s = str(d) if d else ''
    >>> s
    ''
    

    如果您不需要 s 在字典中有内容时作为字典的字符串,则只需 if not d: s = ''

    【讨论】:

    • @mr_bulrathi 您可以单击复选标志以接受此答案以关闭问题。
    • @Selcuk:啊,是的,不是的。 接受而不是关闭 ;)
    • @KevinGuan "Closing" 如"不再列为未答复":)
    • @Selcuk:嘿,回答一个已经有公认答案的问题还不错。如果它比已经接受的更好,我们也可以更改接受的答案。所以我认为,在这种情况下,“不再列为未回答”是不正确的:P
    • @KevinGuan 你说得对,但我只是在说这个:stackoverflow.com/unanswered/tagged/python
    【解决方案3】:

    看看docs

    真值检验

    可以测试任何对象的真值,用于ifwhile 条件或作为以下布尔运算的操作数。下列 值被认为是错误的:

    • None
    • False
    • 任何数字类型的零,例如,00.00j
    • 任何空序列,例如''()[]
    • 任何空映射,例如{}
    • 用户定义类的实例,如果该类定义了__bool__()__len__() 方法,当该方法返回整数零或boolFalse

    因此,根据该粗体规则,您的空字典结果为False。所以你可以使用:

    d = {}
    if not d:
       s = ''
    else:
       s = str(d)
    

    【讨论】:

      【解决方案4】:

      将字典中的每一项转换为字符串,然后用空字符串将它们连接起来,

      >>> ''.join(map(str,d))
      

      【讨论】:

        【解决方案5】:

        我想提议对 dict 进行子类化并覆盖 __str__ 方法:

        class DontForgetToDoYourTaxes(dict):
            def __str__(self):
                return self or ""
        

        然后使用:

        d = DontForgetToDoYourTaxes()
        print d  # ""
        d["ayy"] = "lmao"
        print d  # "{'ayy': 'lmao'}"
        

        【讨论】:

          猜你喜欢
          • 2017-06-14
          • 1970-01-01
          • 1970-01-01
          • 2014-11-12
          • 2014-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多