二次元配列のリストから、特定の要素を含むリストを削除する方法について
python初心者・独学者です。ある程度のことはできるようになったのですが、以下の方法が全くつかめずに頭を抱えています。
どなたかよろしくお願いいたします。
list_a = [
{ "a" : "住所A" , "b" : "成人" , "c" : "女" , "d" : "いる" } ,
{ "a" : "住所B" , "b" : "成人" , "c" : "男" , "d" : "いる" } ,
{ "a" : "住所C" , "b" : "小児" , "c" : "男" , "d" : "いる"} ,
{ "a" : "住所D" , "b" : "成人" , "c" : "男" , "d" : "いない"} ]
のような二次元配列のリストがある場合、"b" == "小児"
の場合は、そのリストを削除して以下の新たなリストを作りたいと思っています。
list_b = [
{ "a" : "住所A" , "b" : "成人" , "c" : "女" , "d" : "いる" } ,
{ "a" : "住所B" , "b" : "成人" , "c" : "男" , "d" : "いる" } ,
{ "a" : "住所D" , "b" : "成人" , "c" : "男" , "d" : "いない"} ]
つまり、二次元配列リスト(list_a)内の、特定のリスト({ "a" : "住所C" , "b" : "小児" , "c" : "男" , "d" : "いる"})
内の、特定の要素("b" : "小児")
に当てはまる場合は、リスト全体から、このリストのみを外したいのです。
for in range ()
文を使ってやってみたのですが、なぜかout of range
のエラーが出てしまい、途中でストップしていまいます。おそらく、リストが削除されると、その分だけrange()
の数が減ってしまっていくことが原因と思われますが、それを回避する方法が分かりません。
特にfor
文にこだわっているわけではないので、他にも方法があるのであれば、教えていただけると嬉しいです。
非常にわかりにくい質問となってしまいましたが、御教授いただけると幸いです。
実際に試したコードは以下です。
list_a = [
{ "a" : "住所A" , "b" : "成人" , "c" : "女" , "d" : "いる" } ,
{ "a" : "住所B" , "b" : "成人" , "c" : "男" , "d" : "いる" } ,
{ "a" : "住所C" , "b" : "小児" , "c" : "男" , "d" : "いる"} ,
{ "a" : "住所D" , "b" : "成人" , "c" : "男" , "d" : "いない"}
]
for i in range ( 0 , len(list_a) ) :
if list_a[i]["b"] == "小児" :
list_b == list_a.remove (list_a[i])
print (list_b)
if文の後にelse文が載っていませんが、これを付けるとエラーが出てしまうか、breakすると、Noneが帰ってきます。そもそも、for文でこの問題を解決できるのかどうかかが、分かりません…。