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

保持简单

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值