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

时间:2010-09-21 14:07:37

标签: python max

我有一个整数或整数元组作为值的字典。如何找到dicts值中的最大整数?

示例:

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

应该返回3 和

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

应该返回5

6 个答案:

答案 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