辞書から文字列を削除する void 関数を作成しようとしています。
キーが辞書にあり、値がその特定のキーにあることを確認する必要があります。
これは私がこれまでに持っているものですが、ある種のジレンマがあるようです。何かアドバイス?
def f(d, n1, n2):
if n1 in d1 and d1[n1] == n2:
del n2
if d1[n1] == []:
del n1
辞書から文字列を削除する void 関数を作成しようとしています。
キーが辞書にあり、値がその特定のキーにあることを確認する必要があります。
これは私がこれまでに持っているものですが、ある種のジレンマがあるようです。何かアドバイス?
def f(d, n1, n2):
if n1 in d1 and d1[n1] == n2:
del n2
if d1[n1] == []:
del n1
n2
およびローカル名を削除しておりn1
、辞書には触れていません。
辞書から削除するdel
には、キーに適用する必要があります。
def f(d, n1, n2):
if n1 in d1 and d1[n1] == n2:
del d1[n1]
よりわかりやすい名前を使用することもできます。
def remove_item(dct, key, value):
if key in dct and dct[key] == value:
del dct[key]
そして、コードをテストすることは常に良い考えであるため、デモ:
>>> demo = {'foo': 'bar', 'spam': 'ham'}
>>> def remove_item(dct, key, value):
... if key in dct and dct[key] == value:
... del dct[key]
...
>>> remove_item(demo, 'monty', 'python')
>>> demo
{'spam': 'ham', 'foo': 'bar'}
>>> remove_item(demo, 'spam', 'eggs')
>>> demo
{'spam': 'ham', 'foo': 'bar'}
>>> remove_item(demo, 'spam', 'ham')
>>> demo
{'foo': 'bar'}
値がリストで、値の 1 つだけを削除する必要がある場合は、 を使用するlist.remove()
か、リスト内包表記を使用する必要があります。
まず、値を1 つlist.remove()
だけ削除するオプションです。値が繰り返される場合、最初の出現のみが削除されます。
def remove_item(dct, key, value):
if key in dct:
if dct[key] == value:
del dct[key]
elif isinstance(dct[key], list) and value in dct[key]:
dct[key].remove(value)
リスト内包表記は、値のすべてのコピーを削除します。
def remove_item(dct, key, value):
if key in dct:
if dct[key] == value:
del dct[key]
elif isinstance(dct[key], list):
dct[key] = [v for v in dct[key] if v != value]
のデモlist.remove()
:
>>> demo = {'foo': ['bar', 'baz', 'bar']}
>>> def remove_item(dct, key, value):
... if key in dct:
... if dct[key] == value:
... del dct[key]
... elif isinstance(dct[key], list) and value in dct[key]:
... dct[key].remove(value)
...
>>> remove_item(demo, 'foo', 'bar')
>>> demo
{'foo': ['baz', 'bar']}
リスト内包表記のデモ:
>>> demo = {'foo': ['bar', 'baz', 'bar']}
>>> def remove_item(dct, key, value):
... if key in dct:
... if dct[key] == value:
... del dct[key]
... elif isinstance(dct[key], list):
... dct[key] = [v for v in dct[key] if v != value]
...
>>> remove_item(demo, 'foo', 'bar')
>>> demo
{'foo': ['baz']}
d = {'a': 1, 'b': 2}
def fun(_d, _k, _v):
return {key: _d[key] for key in _d
if not (_k == key and _v == _d[key])}
print fun(d, 'b', 1)
出力:
{'a': 1, 'b': 2}