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の最初の要素と2番目の要素のどちらか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,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 に答える