1

使用 {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)

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

我知道有很多类似的问题,但我确实发现的问题似乎是我无法适应的同一件事。

谢谢你的帮助。

4

4 回答 4

2

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

(x_max, x_min),  (y_max, y_min) = [(max(x), min(x)) for x in zip(*my_dict.values())]
于 2016-04-11T20:39:40.943 回答
1

在我看来像:

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或者我们比较valuey中的第一个或第二个元素。

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

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

于 2013-03-12T03:04:49.177 回答
1

这也可以:

>>> 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
于 2013-03-12T03:10:04.570 回答
0

不确定我是否正确解释了您的问题,但如果您想从字典/元组关联数组中的所有元组中获取极值{<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))

那是你所追求的吗?

于 2013-03-12T03:39:26.437 回答