2017-02-19 2 views
2

整数キーと整数値を持つOrderedDictodがあるとします。私はodを反復し、見つけた値に基づいてodの要素を削除したいと思います。基本的に私が達成したいことは次のとおりです。最終的には`OrderedDict`を反復し、そのキーのいくつかを削除しますか?

od = {1: 2, 2: 4, 3: 5} 

for key in od: 
    del od[key] 

私はod{1: 2, 3: 5}に等しくなるようにしたいです。 Pythonでは、反復処理中にOrderedDictのサイズを変更することはできません。この問題を克服することは可能でしょうか?

私はあなたがそれを反復処理しているときにdictの長さを変更することができないためであるPythonの3.5

+0

以下のようにf5r5e5d答えは、特にあなたが '3.x' –

答えて

4

で働いています。代わりに、あなたのようにdict内のキーのリストのコピーを反復処理する必要があります。Python2.7でしかし

# For both Python 3.x and 2.7 
>>> for key in list(od): 
...  del od[key] 
... 
>>> od 
{} 

、1でも同じ動作を取得するためにdict.keys()を使用することがあります。

# In Python 2.7 
>>> for key in od.keys(): 
...  del od[key] 
... 
>>> od 
{} 
+0

'リスト(OD)のために 'items'を使用することができることを言って、' Pythonの2または3で動作するはずです、私はいないよ、ということを明確に@ 'dict.keys'は一般的な反復をサポートしていなかった非常に古いバージョンのPythonからのホールドオーバーに過ぎず、' keys() 'は' dict'のキーを取得する唯一の方法でした。 – chepner

0

私は思いますあなたが何を意味するか

od = {1: 2, 2: 4, 3: 5} 

for key in od.copy():     # iterate over a copy 
    if key in od and od[key] in od: # check for both key, 'target' key 
     del od[od[key]]    # then delete the target with indirect indexing 

od 
Out[52]: {1: 2, 3: 5} 
2

これは私が知っている最も簡単な方法です。楽しい!

dictsでは、辞書の長さを変更することはできません。しかし、あなたができることは、元の辞書のリストコピーを作成し、元の辞書を反復することです。

od = {'a': 2, 'b': 4, 'c': 5} 



for key in list(od): 
     if key == 'b': 
      print(key) 
      del od[key] 
      print(od) 
関連する問題