Python:检查字典是否为空的有效方法

时间:2012-11-09 16:29:43

标签: python dictionary

如何检查字典是否为空?更具体地说,我的程序从字典中的一些键开始,我有一个循环,迭代直到字典中有键。整体算法是这样的:

  

从dict中的某个键开始      而dict中有关键     在dict的第一个键上做一些操作     删除第一个键

请注意,上述循环中的some operation可能会向字典添加新密钥。 我试过了 for key,value in d.iteritems()

但它失败了,因为在while循环期间添加了一些新密钥。

7 个答案:

答案 0 :(得分:35)

any(d)

如果dict,这将返回true。 d包含至少一个truelike键,否则为false。

示例:

any({0:'test'}) == False

另一种(更一般的)方法是检查项目数量:

len(d)

答案 1 :(得分:16)

这样做:

while d:
    k, v = d.popitem()
    # now use k and v ...

布尔上下文中的字典如果为空则为False,否则为True。

没有"第一"字典中的项目,因为字典没有排序。但是popitem每次都会删除并返回某些项目。

答案 2 :(得分:14)

我只是想知道我是否打算首先尝试从中获取数据的字典,这似乎是最简单的方法。

d = {}

bool(d)

#should return
False

d = {'hello':'world'}

bool(d)

#should return
True

答案 3 :(得分:13)

只需查看字典:

d = {'hello':'world'}
if d:
  print 'not empty'
else:
  print 'empty'

d = {}
if d:
  print 'not empty'
else:
  print 'empty'

答案 4 :(得分:7)

我会说这种方式更加pythonic并且适合在线:

如果您只需使用您的功能来检查价值:

if filter( your_function, dictionary.values() ): ...

当您需要知道您的dict是否包含任何键时:

if dictionary: ...

无论如何,在这里使用循环不是Python方式。

答案 5 :(得分:2)

据我所知,for循环使用 iter 函数,你不应该在迭代它时弄乱结构。

它必须是字典吗?如果你使用这样的列表可能会起作用:

while len(my_list) > 0:
    #get last item from list
    key, value = my_list.pop()
    #do something with key and value
    #maybe
    my_list.append((key, value))

请注意,my_list是元组(键,值)的列表。唯一的缺点是您无法通过密钥访问。

编辑:没关系,上面的答案基本相同。

答案 6 :(得分:1)

这是另一种方法:

isempty = (dict1 and True) or False

如果dict1为空,那么dict1和True将给出{},当用False解析时给出False。

如果dict1非空,那么dict1和True给出True并且用False解析为True