Pythonで辞書から項目を削除する方法はありますか?
さらに、辞書からアイテムを削除してコピーを返すにはどうすればよいですか (つまり、オリジナルを変更しないでください)。
Pythonで辞書から項目を削除する方法はありますか?
さらに、辞書からアイテムを削除してコピーを返すにはどうすればよいですか (つまり、オリジナルを変更しないでください)。
このdelステートメントは要素を削除します。
del d[key]
これにより既存の辞書が変更されるため、同じインスタンスへの参照を持つ他のユーザーの辞書の内容が変更されることに注意してください。新しい辞書を返すには、辞書のコピーを作成します。
def removekey(d, key):
r = dict(d)
del r[key]
return r
dict()コンストラクターは浅いコピーを作成します。ディープ コピーを作成するには、copyモジュールを参照してください。
すべての dict del/assignment/etc のコピーを作成することに注意してください。一定時間から線形時間に移行し、線形空間も使用することを意味します。小さな辞書の場合、これは問題ではありません。ただし、大きな辞書のコピーを多数作成する予定がある場合は、HAMT のような別のデータ構造が必要になる可能性があります (この回答で説明されています)。
私はあなたの解決策がそれを行うための最良の方法だと思います。ただし、別の解決策が必要な場合は、次のように、指定したキーを含めずに、古い辞書のキーを使用して新しい辞書を作成できます。
>>> a
{0: 'zero', 1: 'one', 2: 'two', 3: 'three'}
>>> {i:a[i] for i in a if i!=0}
{1: 'one', 2: 'two', 3: 'three'}
del ステートメントは、探しているものです。「bar」というキーを持つ foo という名前の辞書がある場合、次のように foo から「bar」を削除できます。
del foo['bar']
これにより、操作対象の辞書が永続的に変更されることに注意してください。元の辞書を保持したい場合は、事前にコピーを作成する必要があります。
>>> foo = {'bar': 'baz'}
>>> fu = dict(foo)
>>> del foo['bar']
>>> print foo
{}
>>> print fu
{'bar': 'baz'}
呼び出しはdict浅いコピーを作成します。ディープ コピーが必要な場合は、 を使用しますcopy.deepcopy。
便宜上、コピーして貼り付けることができる方法を次に示します。
def minus_key(key, dictionary):
shallow_copy = dict(dictionary)
del shallow_copy[key]
return shallow_copy
d = {1: 2, '2': 3, 5: 7}
del d[5]
print 'd = ', d
結果:d = {1: 2, '2': 3}
いいえ、他に方法はありません
def dictMinus(dct, val):
copy = dct.copy()
del copy[val]
return copy
ただし、わずかに変更された辞書のコピーを作成することは、比較的大きなメモリ需要をもたらすため、おそらく良い考えではありません。通常は、古い辞書を(必要な場合でも)ログに記録してから変更することをお勧めします。
>>> def delete_key(dict, key):
... del dict[key]
... return dict
...
>>> test_dict = {'one': 1, 'two' : 2}
>>> print delete_key(test_dict, 'two')
{'one': 1}
>>>
これはエラー処理を行いません。キーがdictにあると想定します。最初にそれを確認し、raiseそうでない場合は確認することをお勧めします。
species = {'HI': {'1': (1215.671, 0.41600000000000004),
'10': (919.351, 0.0012),
'1025': (1025.722, 0.0791),
'11': (918.129, 0.0009199999999999999),
'12': (917.181, 0.000723),
'1215': (1215.671, 0.41600000000000004),
'13': (916.429, 0.0005769999999999999),
'14': (915.824, 0.000468),
'15': (915.329, 0.00038500000000000003),
'CII': {'1036': (1036.3367, 0.11900000000000001), '1334': (1334.532, 0.129)}}
次のコードは、辞書のコピーを作成し、species含まれていないアイテムを削除しますtrans_HI
trans_HI=['1025','1215']
for transition in species['HI'].copy().keys():
if transition not in trans_HI:
species['HI'].pop(transition)