【问题标题】:Python Counting countries in dictionaryPython在字典中计数国家
【发布时间】:2016-11-14 22:53:48
【问题描述】:

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

示例字典:

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

【问题讨论】:

    标签: python python-3.x dictionary count


    【解决方案1】:
    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]
    

    【讨论】:

    • 谢谢 有没有办法在不导入计数器的情况下做到这一点?我应该在问题中说明这一点,但我的代码不能依赖导入
    • 谢谢,非常感谢。我收到错误计数器未定义我会尝试将名称更改为其他名称
    【解决方案2】:

    展平值以获得国家/地区列表:

    >>> [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)]
    

    【讨论】:

    • 有没有办法在没有计数器的情况下做到这一点?抱歉,我应该在问题中提到这一点,但我的代码需要简单且不依赖于导入
    • 对不起,我不回答带有任意限制的问题。 collections 模块是一个核心库,所以没有理由不导入和使用它。
    • @warrior4223 “我的代码需要简单且不依赖于导入 - 你是什么意思?让您的代码变得简单的部分原因是 依赖于导入。每次您需要某个函数/类时,导入都会使您免于“重新发明轮子”。
    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 2023-03-31
    • 2019-10-08
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多