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が帰ってきます。

この違いはどのように考えれば良いのでしょうか?