1. ホーム
  2. python

[解決済み] 辞書から最小の要素(複数可)を削除する

2022-02-07 13:21:30

質問

パラメータとして辞書があり、関連する値が整数であるような関数があります。最小限の要素を削除して、残りのキーのセットを返したいのですが。

私はパイソンでプログラミングをしています。私は同じキーまたは値を持つキーと値のペアを削除することができないようです。私のコードは、2番目と3番目の例では動作しません。 このように動作するようになります。

remaining({A: 1, B: 2, C: 2})
{B, C}

remaining({B: 2, C : 2})
{}
remaining({A: 1, B: 1, C: 1, D: 4})
{D}

これが私の持っているものです。

def remaining(d : {str:int}) -> {str}:
    Remaining = set(d)
    Remaining.remove(min(d, key=d.get))
    return Remaining

解決方法は?

一つの方法として、最小値を取り、それと等しいキーのリストを作り dict.viewkeys() は集合のような振る舞いをし、そこから最小値にマッチするキーを削除します。

d = {'A': 1, 'B': 1, 'C': 1, 'D': 4}

# Use .values() and .keys() and .items() for Python 3.x
min_val = min(d.itervalues())
remaining = d.viewkeys() - (k for k, v in d.iteritems() if v == min_val)
# set(['D'])

余談ですが、変な話ですが {B: 2, C : 2}{} というのも、これらを最小値とするには、実はそれ以上のものがないからです。