【问题标题】:Finding Max and Min coordinates for X and Y in a dictionary在字典中查找 X 和 Y 的最大和最小坐标
【发布时间】:2013-02-27 10:52:52
【问题描述】:

使用 {name: (x, y)} 形式的字典,我需要返回 x 和 y 坐标的最大值和最小值,因此总共 4 个值。

我尝试使用的代码是我发现并尝试调整的类似问题的解决方案(它似乎适用于 X 值,但不适用于 Y):

maxY = particleCoords[max(particleCoords.iteritems(), key=operator.itemgetter(0))[0]][1]
minY = particleCoords[min(particleCoords.iteritems(), key=operator.itemgetter(0))[0]][1]

(字典的名称是particleCoords)

数字是浮点数,可以是负数。

我知道有很多与此类似的问题,但我发现的问题似乎与我无法适应的相同。

感谢您的帮助。

【问题讨论】:

    标签: python dictionary max min


    【解决方案1】:

    这是另一个使用 zip 和列表理解的解决方案,只要您不需要将值映射到键。但是,我不确定它是否会比前面提到的方法更快或更慢。

    (x_max, x_min),  (y_max, y_min) = [(max(x), min(x)) for x in zip(*my_dict.values())]
    

    【讨论】:

    • 您已经晚了大约 3 年,但我很感谢您的建议。 ;)
    • 是的,我知道 :-)。全面披露:我是这里的新贡献者,我回答的部分原因很简单,因为我最终可以在 SE 上获得超过 15 分,所以我实际上可以在这里投票给对我有很大帮助的优秀答案。所以最后我遇到了一个我自己解决的问题,然后想知道其他人是否遇到过这个问题,所以我想我会为一般知识体系做出贡献:-)
    • 啊哈,够公平的!添加旧问题没有害处。
    • 这是一段非常漂亮的代码。我很高兴你发布了它!
    【解决方案2】:

    在我看来是这样的:

    min_x = min(particleCoords.iteritems(),key = lambda item: item[1][0])
    max_x = max(particleCoords.iteritems(),key = lambda item: item[1][0])
    
    min_y = min(particleCoords.iteritems(),key = lambda item: item[1][1])
    max_y = max(particleCoords.iteritems(),key = lambda item: item[1][1])
    

    应该可以...

    每个项目的比较基于每个项目的 (item[1]) 部分。然后根据我们想要x 还是y,我们要么比较value 中的第一个元素还是第二个元素。

    这将为您提供最小/最大的键值对,具体取决于特定的键功能。如果您不关心获取名称,则可以更简洁地执行此操作:

    min_x = min(particleCoords.itervalues(),key = itemgetter(0))
    max_x = max(particleCoords.itervalues(),key = itemgetter(0))
    
    min_y = min(particleCoords.itervalues(),key = itemgetter(1))
    max_y = max(particleCoords.itervalues(),key = itemgetter(1))
    

    min_xmax_x 实际上是 (x,y) 对,它们分别拥有最小和最大 x

    【讨论】:

      【解决方案3】:

      这也可以:

      >>> d = {'name1': (1, 6), 'name2': (7, 4), 'name3': (10, 1)}
      >>> v = d.values()
      >>> zipped = zip(*v)
      >>> print min(zipped[0]), max(zipped[0]), min(zipped[1]), max(zipped[1])
      1 10 1 6
      

      【讨论】:

        【解决方案4】:

        不确定我是否正确解释了您的问题,但如果您想从 {<key>: (x, y)} 形式的元组的字典/关联数组中的所有元组中获取极值,那么这可能会满足您的需求:

        my_dict = {
                   "bananas": (3, 5),
                   "apples": (2, 5),
                   "oranges": (4, 7)
                   }
        
        x_min = None
        x_max = None
        y_min = None
        y_max = None
        
        for x in my_dict:
            try:
                if my_dict[x][0] < x_min: x_min = my_dict[x][0]
                elif my_dict[x][0] > x_min: x_max = my_dict[x][0]
                if my_dict[x][1] < y_min: y_min = my_dict[x][1]
                elif my_dict[x][1] > y_max: y_max = my_dict[x][1]
            except:
                x_min = my_dict[x][0]
                x_max = my_dict[x][0]
                y_min = my_dict[x][1]
                y_max = my_dict[x][1]
        
        print("Extremes (min, max) for position (x, y) are: ((%s, %s), (%s, %s))" \
              % (x_min, x_max, y_min, y_max))
        

        这就是你所追求的吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-23
          • 2011-05-13
          • 1970-01-01
          • 1970-01-01
          • 2013-10-22
          • 2015-12-13
          • 2012-06-04
          • 2020-03-20
          相关资源
          最近更新 更多