-1

辞書から文字列を削除する void 関数を作成しようとしています。

キーが辞書にあり、値がその特定のキーにあることを確認する必要があります。

これは私がこれまでに持っているものですが、ある種のジレンマがあるようです。何かアドバイス?

def f(d, n1, n2):
    if n1 in d1 and d1[n1] == n2:
        del n2
        if d1[n1] == []:
            del n1
4

3 に答える 3

3

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']}
于 2013-11-19T18:34:02.270 に答える
0
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}
于 2013-11-19T18:56:47.253 に答える