1. ホーム
  2. パイソン

[解決済み】任意の条件関数で辞書をフィルタリングする方法は?

2022-04-01 12:48:56

質問

点数の辞書があるのですが、例えば

>>> 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) という関数があるのですが...。

どのように解決するのですか?

ディクショナリ(dict comprehension)を使用することができます。

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