任意の条件関数に従って辞書をフィルタリングするにはどうすればいいですか? 質問する

任意の条件関数に従って辞書をフィルタリングするにはどうすればいいですか? 質問する

ポイントの辞書があります。

>>> points={'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)}

x 値と y 値が 5 未満のすべてのポイント、つまりポイント 'a'、'b'、'd' を含む新しい辞書を作成したいと思います。

による各辞書には、タプルitems()のリストを返す関数があります。(key, pair)

>>> points.items()
[('a', (3, 4)), ('c', (5, 5)), ('b', (1, 2)), ('d', (3, 3))]

そこで私はこう書きました:

>>> for item in [i for i in points.items() if i[1][0]<5 and i[1][1]<5]:
...     points_small[item[0]]=item[1]
...
>>> points_small
{'a': (3, 4), 'b': (1, 2), 'd': (3, 3)}

もっとエレガントな方法はありますか? Python には非常に素晴らしいdictionary.filter(f)機能があると思っていましたが...

ベストアンサー1

dict の理解を使用できます:

{k: v for k, v in points.items() if v[0] < 5 and v[1] < 5}

Python 2 では、2.7 以降では次のようになります。

{k: v for k, v in points.iteritems() if v[0] < 5 and v[1] < 5}

おすすめ記事