统计json文件中所有key出现的个数(若对应value为空则不算有效key),排序后输出。若为dict嵌套dict则各层的key通过破折号连接作为一个新的key。
时间: 2024-04-30 18:19:08 浏览: 95
可以使用递归的方式来遍历JSON中的所有键值对,然后统计每个键出现的次数。对于嵌套的字典,可以使用破折号连接各个层级的键名作为新的键。
以下是一个Python实现的示例代码:
```python
import json
from collections import defaultdict
def count_keys(d, prefix='', counts=None):
if counts is None:
counts = defaultdict(int)
for k, v in d.items():
if isinstance(v, dict):
count_keys(v, prefix + k + '-', counts)
elif v:
counts[prefix + k] += 1
return counts
with open('data.json') as f:
data = json.load(f)
key_counts = count_keys(data)
sorted_counts = sorted(key_counts.items(), key=lambda x: x[1], reverse=True)
for key, count in sorted_counts:
print(f'{key}: {count}')
```
其中,`count_keys`函数接受一个字典和一个可选的前缀字符串(用于处理嵌套字典),并返回一个字典,其中包含每个键出现的次数。`defaultdict(int)`用于创建一个默认值为0的计数器字典。函数使用递归来遍历字典中的每个键值对。如果值是一个字典,则递归地调用`count_keys`函数来处理嵌套键。如果值不为空,则将其对应的键计数器加1。
最后,对键值对计数器字典进行排序,然后按顺序打印每个键出现的次数。
阅读全文