0

キーが文字列で値が整数の 2 つの辞書があります。

ground = {"url1":1,"url2":2,....}
prediction = {"url1":5,"url2":3,....}

私がやりたいことは、キーが予測に存在しない場合はグラウンドで削除することです。

私は頭に浮かんだ最も簡単なことを書きました:

for key in ground:        
    if key not in prediction:
        del ground[key]

また、これを試しました:

for key in ground:
    if not key in prediction.keys():
        del ground[key]

どちらも機能しませんでした。どうすれば目標を達成できますか?

4

3 に答える 3

2

辞書内包表記を使用して、新しい辞書を作成できます。

ground = {k: ground[k] for k in ground if k in prediction}

または、Python 2 またはPython 3groundを使用して辞書のキーを反復処理します(Python 2 でも機能します)。これは、辞書からキーが削除されても影響を受けない新しいリストを返します。ground.keys()list(ground.keys())ground

for k in list(ground.keys()):
    if k not in prediction:
        del ground[k]
于 2016-03-21T11:12:16.960 に答える
0

2 番目の試行は Python 2 で正常に機能します。Python 3 ではkeys()、リストではなくビューであるため、最初のエラーと同じエラーが発生します。反復中に辞書のサイズが変更されました。これを修正するには、まずリストに変換します。

for key in list(ground.keys()):
  if key not in prediction:
    del ground[key]
于 2016-03-21T11:09:22.613 に答える