在Python中查找包含混合项的字典中的最大值

0 投票
6 回答
2285 浏览
提问于 2025-04-16 04:24

我有一个字典,里面的值要么是整数,要么是整数的组合(元组)。我该怎么找出这个字典中所有值里的最大整数呢?

举个例子:

x1 = {0:2, 2:1, 3:(1, 2), 20:3}

这个例子应该返回3,而

x2 = {0:2, 2:1, 3:(1, 5), 20:3}

这个例子应该返回5。

6 个回答

1

这是我不需要2.6版本的简洁写法:

x1 = {0:2, 2:1, 3:(1, 2), 20:3}
x2 = {0:2, 2:1, 3:(1, 5), 20:3}
print max(max(values) if hasattr(values,'__iter__') else values for values in x1.values()) 
print max(max(values) if hasattr(values,'__iter__') else values for values in x2.values()) 

输出结果:

3
5

不过我强烈建议你去这些值的来源处,把整数的存储方式改成单例元组。这样你就可以用更简洁的代码:

x1 = {0:(2,), 2:(1,), 3:(1, 2), 20:(3,)}
x2 = {0:(2,), 2:(1,), 3:(1, 5), 20:(3,)}
for x in (x1,x2):
    print max(max(values) for values in x.values())
1
max(max(k,max(v) if isinstance(v,collections.Iterable) else v) for k,v in x1.items())

另一个一行代码没有考虑到键。

这样做不好,因为字典的设计初衷是键应该是键,而不是用来存储数据的地方。我觉得你应该重新考虑一下你的数据结构。

编辑:上面的说法是胡说八道。感谢@SilentGhost指出这一点。

3

这是一个一行代码:

max(max(v) if isinstance(v, collections.Iterable) else v for v in d.itervalues())

这个代码至少需要Python 2.6版本,因为它用到了collections.Iterable这个抽象基类(ABC)。

撰写回答