python如何统计字典里面健的数量_获取Python中字典字典中所有键的数量

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:41   2504   0

保持简单

如果我们知道所有的值都是字典,并且不希望检查它们的任何值是否也是字典,那么它就像下面这样简单:

len(dict_test) + sum(len(v) for v in dict_test.itervalues())

细化它一点,实际上在计数前检查值是否是字典:

len(dict_test) + sum(len(v) for v in dict_test.itervalues() if isinstance(v, dict))

最后,如果你想做一个任意深度,像下面的东西:

def sum_keys(d):

return (0 if not isinstance(d, dict)

else len(d) + sum(sum_keys(v) for v in d.itervalues())

print sum_keys({'key2': {'key_in3': 'value', 'key_in4': 'value'},

'key1': {'key_in2': 'value',

'key_in1': dict(a=2)}})

# => 7

在后一种情况下,我们定义一个将被递归调用的函数。给定值d,我们返回:

> 0如果该值不是字典;要么

>字典中的键数量,加上我们所有子代码中键的总数。

使它更快

以上是一个简洁和容易理解的方法。我们可以使用发电机得到一点快:

def _counter(d):

# how many keys do we have?

yield len(d)

# stream the key counts of our children

for v in d.itervalues():

if isinstance(v, dict):

for x in _counter(v):

yield x

def count_faster(d):

return sum(_counter(d))

这让我们更多的性能:

In [1]: %timeit sum_keys(dict_test)

100000 loops, best of 3: 4.12 s per loop

In [2]: %timeit count_faster(dict_test)

100000 loops, best of 3: 3.29 s per loop

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP