将空字典转换为空字符串

5
>>> d = {}
>>> s = str(d)
>>> print s
{}

我需要一个空字符串代替。

12
为什么这个问题会有500声望悬赏,我非常好奇。 - BrockLee
@LeoCHan:我很好奇为什么你的评论现在有9个赞(哈哈)。无论如何,答案是我想成为10ker - Remi Guan
5个回答

16
你可以通过下面最简单的方法来完成,因为空字典是False,并且使用布尔运算符实现。
>>> d = {}
>>> str(d or '')
''

或者不使用 str

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

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

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

8

当你尝试将空字典转换为布尔对象时,它是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 = ''


@Selcuk:啊,是的和不是。接受而不是关闭 ;) - Remi Guan
@KevinGuan “Closing” 的意思是“不再列为未回答的问题” :) - Selcuk
@Selcuk:嘿,回答已经有被接受的答案的问题也不错。而且如果新的答案比已经被接受的答案更好,我们还可以更改已经接受的答案。所以我认为,在这种情况下,“不再列为未回答”是不正确的 :P - Remi Guan
1
@KevinGuan 你说得没错,但我只是在谈论这个:http://stackoverflow.com/unanswered/tagged/python - Selcuk
@Selcuk:啊,那个问题。是的,你说得对。“从那个页面中删除这个问题”。 - Remi Guan
显示剩余3条评论

2
请看文档

真值测试

任何对象都可以进行真值测试,用于ifwhile条件中,或作为下面布尔操作的操作数。以下值被认为是假的:

  • None
  • False
  • 任何数字类型的零,例如:00.00j
  • 任何空序列,例如:''()[]
  • 任何空映射,例如:{}
  • 如果类定义了一个__bool__()__len__()方法,并且该方法返回整数零或boolFalse,则用户定义的类的实例也被认为是假的。

因此,根据加粗的规则,您的空字典实际上是False。所以您可以使用:

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

0

将字典中的每个项目转换为字符串,然后用空字符串连接它们。

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

0
我想提议子类化字典并覆盖__str__方法:
class DontForgetToDoYourTaxes(dict):
    def __str__(self):
        return self or ""

然后使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接