首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何统计嵌套字典中关键字出现的频率?

如何统计嵌套字典中关键字出现的频率?
EN

Stack Overflow用户
提问于 2021-05-14 21:01:36
回答 3查看 61关注 0票数 1

我有一个嵌套的字典:

代码语言:javascript
复制
{'1': {'Toy Story (1995)': 5.0,
  'GoldenEye (1995)': 3.0,
  'Four Rooms (1995)': 4.0,
  'Get Shorty (1995)': 3.0,
  'Copycat (1995)': 3.0},
'2': {'GoldenEye (1995)': 3.0,
  'Get Shorty (1995)': 3.0,
  'Copycat (1995)': 3.0},
'3': {'Toy Story (1995)': 5.0,
  'Get Shorty (1995)': 3.0,
  'Copycat (1995)': 3.0}}

如你所见,我有三个条目,每个值都有带电影的字典。我想数一数哪部电影最常出现。因此,输出可以是一个列表或字典,其中包含电影名称以及它在项目中出现的频率。像这样:

代码语言:javascript
复制
{'Get Shorty (1995)': 3, 
'Copycat (1995)': 3, 
'GoldenEye (1995)': 2, 
'Toy Story (1995)': 2, 
'Four Rooms (1995)': 1}

如何做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2021-05-14 21:08:00

使用itertools.chain.from_iterable将电影名称展平为一个长列表,然后使用collections.Counter计算重复的名称。

假设嵌套的字典名为x

代码语言:javascript
复制
>>> from itertools import chain
>>> from collections import Counter
>>> Counter(chain.from_iterable(x.values()))
Counter({'Get Shorty (1995)': 3, 'Copycat (1995)': 3, 'Toy Story (1995)': 2, 'GoldenEye (1995)': 2, 'Four Rooms (1995)': 1})

您可以使用以下命令将计数器转换回常规dict

代码语言:javascript
复制
dict(counter)

假设您的计数器名为counter

票数 7
EN

Stack Overflow用户

发布于 2021-05-14 21:22:07

这个怎么样?

代码语言:javascript
复制
org_dict = {'1': {'Toy Story (1995)': 5.0,
            'GoldenEye (1995)': 3.0,
            'Four Rooms (1995)': 4.0,
            'Get Shorty (1995)': 3.0,
            'Copycat (1995)': 3.0},
        '2': {'GoldenEye (1995)': 3.0,
            'Get Shorty (1995)': 3.0,
            'Copycat (1995)': 3.0},
        '3': {'Toy Story (1995)': 5.0,
            'Get Shorty (1995)': 3.0,
            'Copycat (1995)': 3.0}}
  
new_dict = {}
for e in org_dict.values():
    for movie in e.keys():
        if movie in new_dict:
            new_dict[movie] += 1
        else:
            new_dict[movie] = 1

new_dict输出为

代码语言:javascript
复制
{'Copycat (1995)': 3,
 'Four Rooms (1995)': 1,
 'Get Shorty (1995)': 3,
 'GoldenEye (1995)': 2,
 'Toy Story (1995)': 2}
票数 0
EN

Stack Overflow用户

发布于 2021-05-14 21:24:11

为了得到想要的结果,我们可以首先迭代给定字典中的所有键并提取它们的值,然后从这些值中再次迭代以获得它们的键,并将它们作为键添加到我们的新字典中,然后在它们再次出现时增加它们的值。

我尝试的代码是

代码语言:javascript
复制
sample_dict = {'1': {'Toy Story (1995)': 5.0,
                'GoldenEye (1995)': 3.0,
                'Four Rooms (1995)': 4.0,
                'Get Shorty (1995)': 3.0,
                'Copycat (1995)': 3.0},
            '2': {'GoldenEye (1995)': 3.0,
                'Get Shorty (1995)': 3.0,
                'Copycat (1995)': 3.0},
            '3': {'Toy Story (1995)': 5.0,
                'Get Shorty (1995)': 3.0,
                'Copycat (1995)': 3.0}}

 result_dict= {}

for key in sample_dict.keys():
    for keys in sample_dict[key].keys():
        if keys in result_dict.keys():
            result_dict[keys] += 1
        else:
            result_dict[keys] = 1

print(result_dict) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67534808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档