1
mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}] 

私のリストは次のようなものです。どのようにキー 'a'を含む辞書全体を削除するのですか?リスト内の辞書全体を削除するにはどうすればよいですか?

+0

これは常に最初の辞書ですか?キー "a"を持つ辞書が2つある場合はどうなりますか? –

+3

'{dはmylistにdのために' a 'が 'd'にない'なら? –

+0

'a'というキーを持つ辞書が1つしかない場合は、まず 'を試してみてください。'私はPythonの初心者であり、私が行くようにゆっくりと理解していきたいと思っています –

答えて

1

ます。また、この問題を解決するためにfilterを使用することができます:

ような何かを行うことができます
mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}] 
new_list = list(filter(lambda x: "a" not in x, mylist)) 

出力:

[{'c': 1, 'd': 2}] 

最近のコメントに関しては、値が "りんご" で辞書を削除する:あなたが言ったコメントで

mylist = [{"a" : "apple", "b" : "orange"}, {"c" : "pineapple", "d" : "mango"}] 
final_list = list(filter(lambda x:"apple" not in x.values(), mylist)) 
+0

完璧に動作します。 Thanx、フォローアップの質問があります 私のリストがこのようなものなら、 mylist = [{"a":リンゴ、 "b":オレンジ}、{"c":パイナップル、 "d":マンゴー}] "apple"という単語を含む辞書を削除するにはどうすればよいですか? –

+0

@AbrahamKnaphih私の最近の編集をご覧ください。 – Ajax1234

+0

パーフェクト。どうもありがとうございます。私は明確な説明と答えを得るために多くのGoogleを検索しました。今私は知っている。 –

5

あなたに'a'キーなしdict sの新しいリストを作成するリスト内包を使用することがあります:あなたは、元のリストから要素を削除する必見ある場合

>>> mylist = [{"a" : 1, " b" : 2},{"c" : 1, "d" :2}] 

>>> [d for d in mylist if 'a' not in d] 
[{'c': 1, 'd': 2}] 

>>> mylist = [{"a" : 1, " b" : 2},{"c" : 1, "d" :2}] 

#       v Iterate over the copy of the list, 
#       v so that the change in index after the 
#       v deletion of elements in the list won't 
#       v impact the future iterations 
>>> for i, d in enumerate(list(mylist)): 
...  if 'a' in d: 
...   del mylist[i] 
... 
>>> mylist 
[{'c': 1, 'd': 2}] 
3

そのI私はPythonの初心者で、ゆっくりと移動したいと思っています。私は行くとよく理解しています

だから私は説明のステップに集中しているだけで、すぐにソリューションを提供するのではありません。

辞書は、特定のキーが含まれていかどうかを確認する最も簡単な方法は、inを使用することです:

>>> d = {'a': 10, 'b': 20} 
>>> 'a' in d 
True 

>>> 'c' in d 
False 

それはnot inと辞書内のキーではない場合は同様にあなたが確認できます。

>>> 'c' not in d 
True 

>>> 'b' not in d 
False 

辞書のリストを扱っているので、その辞書を反復処理する必要があります。パイソンを使用すると、forで各要素を反復処理することができます

>>> list_of_dicts = [{'a': 10, 'b': 20}, {'b': 10, 'c': 20}] 
>>> for subdict in list_of_dicts: 
...  print(subdict) 
... 
{'a': 10, 'b': 20} 
{'b': 10, 'c': 20} 

をだから、基本的には鍵がin subdictある場合は、チェックしてforループを結合する必要があります。あなたが残しておきたい辞書を保存するために、新しいリストを作成することができますので、しかしそれは、あなたが現在反復処理しているものは何でも変更することはお勧めできません。

>>> keep_these = [] 
>>> for subdict in list_of_dicts: 
...  if 'a' not in subdict: 
...   keep_these.append(subdict) 
... 
>>> keep_these 
[{'b': 10, 'c': 20}] 

Pythonでこれを行うにはさらに簡単な方法があります:リストの理解。 Moinuddin四はすでにそれを提示したが、単にそれを繰り返すために:

>>> [subdict for subdict in list_of_dicts if 'a' not in subdict] 
[{'b': 10, 'c': 20}] 

これはまさに私が上記で使用forループのような本質的であるが、それは短く、高速です。

+0

非常に説明的で、ありがとうございます(+1) –

+0

ありがとうございます。よく説明され、理解しやすい! –

関連する問題