如何在列表字典中找到每个键的最大值?

时间:2014-09-15 17:08:54

标签: python dictionary max defaultdict

如何在列表字典中提取每个键的最大值?

例如

#Generate some sample data
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
    d[k].append(v)

>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

我想返回以下结果:

blue 4
red 1
yellow 3

我没有成功尝试循环字典并提取列表值。但是,我似乎找不到提取值并将它们链接到正确键的方法。

3 个答案:

答案 0 :(得分:4)

for k, v in d.items():
    print k, max(v)

答案 1 :(得分:2)

如果您不需要保留所有可能值的列表,并且只需要最大值,则可以执行此操作:

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = dict(sorted(s))

d现在是:

{'blue': 4, 'yellow': 3, 'red': 1}

sorted(s)将按升序对元组进行排序,dict构造函数仅反映最终(最高)结果。

奖励:如果您想要最低价值,dict(sorted(s, reverse=True))会给您:

{'blue': 2, 'red': 1, 'yellow': 1}

答案 2 :(得分:1)

如果您希望结果也在字典中,您可以使用单行生成器表达式。

items = {'blue': [2, 4], 'yellow': [1, 3], 'red': [1]}
maxitems = {k : max(items[k]) for k in items}
相关问题