40

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

从 dict 中的某个键开始,而 dict
中有键,
对 dict 中的第一个键进行一些操作
删除第一个键

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

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

4

7 回答 7

46

any(d)

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

例子:

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

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

len(d)

于 2013-06-27T15:37:21.320 回答
18

I just wanted to know if the dictionary i was going to try to pull data from had data in it in the first place, this seems to be simplest way.

d = {}

bool(d)

#should return
False

d = {'hello':'world'}

bool(d)

#should return
True
于 2014-02-15T02:41:40.813 回答
17

只需查字典:

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

d = {}
if d:
  print 'not empty'
else:
  print 'empty'
于 2014-04-01T18:25:05.320 回答
15

这将做到:

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

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

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

于 2012-11-09T16:32:04.537 回答
8

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

如果您只需要使用您的函数检查值:

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

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

if dictionary: ...

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

于 2012-11-09T20:57:52.727 回答
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 是元组 (key, value) 的列表。唯一的缺点是您无法通过密钥访问。

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

于 2012-11-09T16:47:36.107 回答
1

这是另一种方法:

isempty = (dict1 and True) or False

如果 dict1 为空,则 dict1 和 True 将给出 {},而当用 False 解决时会给出 False。

如果 dict1 是非空的,那么 dict1 和 True 给出 True 并且用 False 解决这个给出 True

于 2013-08-14T19:48:31.280 回答