簡體   English   中英

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

[英]Finding Max and Min coordinates for X and Y in a dictionary

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

數字為浮點數,可以為負數。

我知道有很多類似的問題,但是我確實發現的那件事似乎是我無法適應的。

謝謝你的幫助。

在我看來像:

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] )部分。 然后,這取決於我們是否需要xy我們要么比較第一或第二個元素的

這將為您提供最小/最大的鍵值對,具體取決於特定的鍵功能。 如果您不在乎獲取名稱,則可以更簡潔地執行此操作:

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

這也將起作用:

>>> 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

這是另一個使用zip和list理解的解決方案,只要您不需要將值映射到鍵即可。 但是,我不確定它會比前面提到的方法快還是慢。

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

不知道我是否正確解釋了您的問題,但是如果您想從{<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))

那是你的追求嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM