在字典中查找具有最多值的键

时间:2016-11-14 21:59:50

标签: python python-3.x find key max

我正在处理一个函数,我需要在字典中找到具有最多值的键(艺术家名称)。有时两个键具有相同数量的值,在这种情况下,我需要返回一个艺术家名称列表。

示例词典:

{'M':[("One",1400,30.0, 20.5,"oil paint","Austria"),("Three",1430,100.0,102.0,"watercolor","France")],
        'P':[("Eight",1460, 225.0, 200.0, "fresco","Netherlands")],
        'U':[("Nine",1203,182.0, 957.0,"egg tempera","Italy"), ("Twelve",1200,76.2,101.6,"egg tempera","France")]
        }

对于这个字典,因为M和U的值最大(M有2而U有2而P只有1),函数应该返回

artists_with_most_work(dictionary1())

['M', 'U']

我如何搜索每个键的值数并返回最多的键?我认为使用max()会是一个好主意,但我不认为我在下面的当前尝试中正确使用它。感谢任何可以提供帮助的人

代码:

def artist_with_most_work(db):
    matches = []
    for key, record_list in db.items():
        for record in record_list:
            if item in record: 
                max(db) = themax
            matches.append(themax)
        return matches

2 个答案:

答案 0 :(得分:6)

您必须首先找到最大长度,然后返回引用具有该长度的列表的所有键:

def artist_with_most_work(db):
    maxcount = max(len(v) for v in db.values())
    return [k for k, v in db.items() if len(v) == maxcount]

演示:

>>> def artist_with_most_work(db):
...     maxcount = max(len(v) for v in db.values())
...     return [k for k, v in db.items() if len(v) == maxcount]
...
>>> d1 = {'M':[("One",1400,30.0, 20.5,"oil paint","Austria"),("Three",1430,100.0,102.0,"watercolor","France")],
...       'P':[("Eight",1460, 225.0, 200.0, "fresco","Netherlands")],
...       'U':[("Nine",1203,182.0, 957.0,"egg tempera","Italy"), ("Twelve",1200,76.2,101.6,"egg tempera","France")]
...      }
>>> artist_with_most_work(d1)
['M', 'U']

答案 1 :(得分:0)

由于要求退回领带的所有成员,您必须跟踪所有可能性。

def artist_with_most_work(db):
    keys_by_size = collections.defaultdict(list)
    maxsize = 0
    for key, recordlist in db.items():
        nitems = len(recordlist)
        keys_by_size[nitems].append(key)
        maxsize = max(maxsize, nitems)

    return keys_by_size[maxsize]
相关问题