在字典中查找X和Y的最大最小坐标

1 投票
4 回答
3561 浏览
提问于 2025-04-17 18:45

我在处理一个字典,格式是{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 个回答

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
2

这里有另一种方法,使用了zip和列表推导式,只要你不需要把值映射到键上。不过,我不确定这种方法比之前提到的那些方法是更快还是更慢。

(x_max, x_min),  (y_max, y_min) = [(max(x), min(x)) for x in zip(*my_dict.values())]
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 还是 y,我们要么比较第一个元素,要么比较第二个元素。

这样你就能得到一个键值对,这个对的值是最小或最大,具体取决于你用的键函数。如果你不在乎获取名字的话,可以更简洁地做到这一点:

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(x,y) 对。

撰写回答