我正在编写一个函数来计算一个国家/地区出现在字典中的次数,并返回最常出现的国家/地区。如果出现的国家多于一个,那么它应该返回一个国家列表。
示例字典:
{'Leonardo da Vinci': [("Portrait of Isabella d'Este", 1499, 63.0, 46.0, 'chalk', 'France'), ('The Last
Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')], 'Pablo Picasso': [('Guernica', 1937,
349.0, 776.0, 'oil paint', 'Spain')]}
由于法国,意大利和西班牙在这本词典中只出现一次该函数应该返回
countries_appeared_most(dictionary1())
['France', 'Italy', 'Spain']
如果其中一个国家出现了2到3次,那么该功能将只返回该国家。我下面的当前代码反而搜索出现最多的艺术家,但我相信一些小的改动可以帮助我返回看起来最多的国家。有没有人有关于如何做到这一点的建议?谢谢你的帮助
代码:
def countries_appeared_most(db):
if not db:
return None
maxcount = max(len(v) for v in db.values())
themax = [k for k, v in db.items() if len(v) == maxcount]
themax.sort()
return themax
答案 0 :(得分:3)
counter = {}
for painting_list in db.values():
for painting in painting_list:
country = painting[-1]
counter[country] = counter.get(country, 0) + 1
maxcount = max(counter.values())
themax = [k for k, count in counter.items() if count == maxcount]
答案 1 :(得分:1)
展平数值以获取国家/地区列表:
>>> [x[-1] for X in d.values() for x in X]
['Spain', 'France', 'Italy']
Counter
可以直接为您提供最常见的内容:
>>> from collections import Counter
>>> countries = [x[-1] for X in d.values() for x in X]
>>> Counter(countries).most_common()
[('Italy', 1), ('Spain', 1), ('France', 1)]