web-dev-qa-db-ja.com

Pythonの辞書からキーを削除して新しい辞書を返す

辞書があります

d = {'a':1, 'b':2, 'c':3}

cのようにキーを削除して、1回の関数呼び出しでそのキーなしで辞書を返す必要があります

{'a':1, 'b':2}

d.pop( 'c')は、辞書の代わりにキー値-3-を返します。

これが理解に入るので、それが存在する場合、1つの関数ソリューションが必要になります

30
Xeos

これはどう:

{i:d[i] for i in d if i!='c'}

それは Dictionary Comprehensions と呼ばれ、Python 2.7。

またはPython 2.7より古い場合:

dict((i,d[i]) for i in d if i!='c')
34
jh314

自分で巻いてみませんか?これは、辞書内包表記を使用して新しいものを作成するよりも高速です。

def without(d, key):
    new_d = d.copy()
    new_d.pop(key)
    return new_d
11
Gustav Larsson
>>> a = {'foo': 1, 'bar': 2}
>>> b = a.pop('foo'); a
{'bar': 2}
0
Felix Yuan

これでうまくいきます

(lambda dict_,key_:dict_.pop(key_,True) and dict_)({1:1},1)

編集これは、辞書に存在する場合はキーをドロップし、キーと値のペアなしで辞書を返します

pythonでは、オブジェクトを適切に変更し、変更されたオブジェクトの代わりに値を返す関数があります。{}。pop関数がその例です。

例のようにラムダ関数を使用するか、以下のより一般的な(lambda func:obj:(func(obj)and False)またはobj)を使用してこの動作を変更し、期待される動作を取得できます。

0
sinaiy