使用{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)
数字是浮点数,可能是负数。
我知道有很多类似的问题,但我发现的那个问题似乎与我无法适应的一样。
感谢您的帮助。
答案 0 :(得分: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,y)
对,分别包含最小和最大x
。
答案 1 :(得分: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 :(得分:1)
这是使用zip和列表理解的另一种解决方案,只要您不需要将值映射到键。但是,我不确定它是否比前面提到的方法更快或更慢。
(x_max, x_min), (y_max, y_min) = [(max(x), min(x)) for x in zip(*my_dict.values())]
答案 3 :(得分:0)
不确定我是否正确解释了您的问题,但如果您希望从{<key>: (x, y)}
形式的元组的字典/关联数组中获取所有元组的极值,那么这可能会为您提供所需的内容: / p>
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))
那是你所追求的吗?