在Python中查找包含混合项的字典中的最大值
我有一个字典,里面的值要么是整数,要么是整数的组合(元组)。我该怎么找出这个字典中所有值里的最大整数呢?
举个例子:
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)。