2016-11-14 40 views
0

我正在写一个函数来计算一个国家出现在字典中的次数,并返回出现次数最多的国家。如果多于一个国家出现的话,那么它应该返回一个国家名单。Python在字典中计数国家

例词典:

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

回答

3
​​
+0

Thanks are there一种不需要导入Counter的方法呢?我应该在问题中明确说明这一点,但我的代码不能依赖进口 – warrior4223

+0

@ warrior4223编辑。 –

+0

谢谢,我很感激。我得到错误计数器未定义我会尝试将名称更改为别的 – warrior4223

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)] 
+0

有没有办法做到这一点没有反击?对不起,我应该提到这个问题,但我的代码需要简单,不依赖进口 – warrior4223

+0

对不起,但我不回答任何限制的问题。 collections模块是一个核心库,所以没有理由不导入和使用它。 – wim

+0

@ warrior4223 _“我的代码需要**简单,不依赖进口**”_ - 你是什么意思?部分代码简单_is_依赖于导入。每次您需要某个功能/课程时,进口可以帮助您避免“重新发明轮子”。 –