【问题标题】:Finding max in Python dict with nested tuple keys使用嵌套元组键在 Python dict 中查找最大值
【发布时间】:2018-06-18 15:56:52
【问题描述】:

假设我有这个 Python 字典:

dict = {
((0,0), 'A'): 0.0, 
((0,0), 'B'): 0.7,
...
((2,4), 'C'): 0.2,
...}

我想找到给定嵌套元组的最大值,例如 (0,0)。 比如:

max(dict((0,0), *). 

在这种情况下它应该返回0.7,如何做到这一点?

【问题讨论】:

  • 是的,键是元组,元组的一个值是另一个元组。
  • 我改变了语法,希望它现在是正确的。 dict 的键由一对整数值和一个字符串组成。我想找到所有字符串的最大值。
  • 旁注:不要在类之后命名变量,例如使用ddict_ 而不是dict

标签: python dictionary nested tuples max


【解决方案1】:

使用collections.defaultdict 后跟字典理解:

d = {((0,0), 'A'): 0.0, 
     ((0,0), 'B'): 0.7,
     ((2,4), 'C'): 0.2}

from collections import defaultdict

res = defaultdict(list)

for (k1, k2), v in d.items():
    res[k1].append(v)

max_vals = {k: max(v) for k, v in res.items()}

print(max_vals)

{(0, 0): 0.7, (2, 4): 0.2}

【讨论】:

    【解决方案2】:

    如果我理解你的需要。

    d = {((0,0), 'A'): 0.0, ((0,0), 'B'): 0.7, ((2,4), 'C'): 0.2,}
    dValue = dict((k, v) for k,v in d.items() if k[0] == (0,0))
    print( max(dValue.values()) )
    

    输出:

    0.7
    

    【讨论】:

      【解决方案3】:

      我为你的问题做了一个非常简单的例子。当然有更有效的方法来做到这一点。

      dict = { ((0, 0), "A"): 0.0,
               ((0, 0), "B"): 0.7, 
               ((0, 0), "C"): 0.9, 
               ((0, 1), "A"): 0.0,
               ((0, 1), "B"): 0.7, 
               ((0, 1), "C"): 0.8}
      mymax={}
      for key1,key2 in dict:
          if key1 in mymax:
              mymax[key1] = max(mymax[key1],dict[(key1,key2)])
          else:
               mymax[key1] = dict[(key1,key2)]
      

      mymax= {(0, 0): 0.9, (0, 1): 0.8} 是所有种类中的最大值。

      【讨论】:

        猜你喜欢
        • 2019-01-19
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多