我有一个嵌套的字典:
{'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}如何做到这一点?
发布于 2021-05-14 21:08:00
使用itertools.chain.from_iterable将电影名称展平为一个长列表,然后使用collections.Counter计算重复的名称。
假设嵌套的字典名为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。
发布于 2021-05-14 21:22:07
这个怎么样?
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] = 1new_dict输出为
{'Copycat (1995)': 3,
'Four Rooms (1995)': 1,
'Get Shorty (1995)': 3,
'GoldenEye (1995)': 2,
'Toy Story (1995)': 2}发布于 2021-05-14 21:24:11
为了得到想要的结果,我们可以首先迭代给定字典中的所有键并提取它们的值,然后从这些值中再次迭代以获得它们的键,并将它们作为键添加到我们的新字典中,然后在它们再次出现时增加它们的值。
我尝试的代码是
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) https://stackoverflow.com/questions/67534808
复制相似问题