Python在字典中计数国家

时间:2016-11-14 22:53:48

标签: python python-3.x dictionary count

我正在编写一个函数来计算一个国家/地区出现在字典中的次数,并返回最常出现的国家/地区。如果出现的国家多于一个,那么它应该返回一个国家列表。

示例字典:

{'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

2 个答案:

答案 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)]