在字典中查找X和Y的最大最小坐标
我在处理一个字典,格式是{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_x
和 max_x
实际上是持有最小和最大 x
的 (x,y)
对。