二次元配列リストの個々の要素についての疑問
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
list_b = [
{ "a" : "住所A" , "b" : "成人" , "c" : "女" , "d" : "いる" } ,
{ "a" : "住所B" , "b" : "成人" , "c" : "男" , "d" : "いる" } ,
{ "a" : "住所D" , "b" : "成人" , "c" : "男" , "d" : "いない"} ]
を作成する場合、リスト内包表記を用いて、
list_b = [x for x in list_a if x["b"] != "小児"]
とすれば良いことは分かりました。
ここで、上記内包表記の記述方法に疑問がわきました。
list_aの中の特定の要素を記述する場合、例えば、
list_a[0]["b"]
のようにすると
"成人"
が帰ってきます。しかし、上記のリスト内包表記では、この["b"]
の要素を指定するのにlist_a["b"]
のみで指定できています。["b"]
の前の[]
がないことに違和感があります。
例えば、
print(list_a[0]["b"])
は問題ありませんが、
print(list_a["b"])
ではTypeError: list indices must be integers or slices, not strが帰ってきます。
この違いはどのように考えれば良いのでしょうか?