Python 如何计算嵌套字典中的键出现的频率?
我有一本嵌套字典:Python 如何计算嵌套字典中的键出现的频率?,python,python-3.x,function,dictionary,Python,Python 3.x,Function,Dictionary,我有一本嵌套字典: {'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 Sto
{'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}}
如你所见,我有三个条目,每个条目都有带胶片的字典。我想数一数哪部电影最常上映。因此,输出可以是一个列表或字典,其中包含电影名称以及它在项目中出现的频率。比如:
{'Get Shorty (1995)': 3,
'Copycat (1995)': 3,
'GoldenEye (1995)': 2,
'Toy Story (1995)': 2,
'Four Rooms (1995)': 1}
如何做到这一点?用于将电影名称平铺成一个长列表,然后计算重复的名称
假设嵌套的dict被称为x
>>> 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
dict(counter)
假设您的计数器名为Counter
这个怎么样
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
输出为
{'Copycat (1995)': 3,
'Four Rooms (1995)': 1,
'Get Shorty (1995)': 3,
'GoldenEye (1995)': 2,
'Toy Story (1995)': 2}
为了得到期望的结果,我们可以首先迭代给定字典中的所有键并提取它们的值,然后从这些值中,我们将再次迭代以获取它们的键,并将它们作为键添加到新字典中,然后在它们再次出现时增加它们的值 我试过的代码是
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)