我有一个整数或整数元组作为值的字典。如何找到dicts值中的最大整数?
示例:
x1 = {0:2, 2:1, 3:(1, 2), 20:3}
应该返回3 和
x2 = {0:2, 2:1, 3:(1, 5), 20:3}
应该返回5
答案 0 :(得分:3)
单行:
max(max(v) if isinstance(v, collections.Iterable) else v for v in d.itervalues())
由于collections.Iterable
ABC,至少需要Python 2.6。
答案 1 :(得分:1)
max(max(k,max(v) if isinstance(v,collections.Iterable) else v) for k,v in x1.items())
另一个单行不考虑钥匙。
这很icky因为它不是字典的设计用途:键是键,而不是数据的存储。我认为你应该重新考虑你的数据结构。
编辑:以上是无稽之谈。感谢@SilentGhost指出它。答案 2 :(得分: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
HOWEVER 我强烈建议转到这些值的来源并将整数存储更改为单例元组。然后您可以使用更干净的代码:
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())
答案 3 :(得分:0)
你可以试试这个方法:
这样的事情:
def maxofdict(x):
s = set()
for v in x.values():
if hasattr(v, '__len__'):
s.update(v)
else:
s.add(v)
return max(s)
答案 4 :(得分:0)
假设x1 = 4的正确结果;
def maxOfMixedDict(x):
max = 0
for key, value in x.items():
if(key > max):
max = key
try:
for v2 in value:
if(v2 > max):
max = v2
except TypeError, e:
pass
return max
答案 5 :(得分:-1)
您需要通用的flatten()
功能。奇怪的Python标准库没有提供 - 甚至不在itertools
- 但谷歌搜索应该让你实现。如果您不介意可能向后兼容,则import
可以tkinter
{私有'实施:
from _tkinter import _flatten as flatten
def mixed_max(d):
return max(flatten(d.items()))
mixed_max({0: 2, 2: 1, 3: (1,2), 4: 0}) # => 4
mixed_max({0: 2, 2: 1, 3: (1,5), 4: 0}) # => 5