見出し画像

[Python] 辞書を要素としたリストの要素の存在確認する

はじめに

Pythonで、辞書を要素としたリストの中に、特定条件に一致する要素が存在するかどうかを確認する実装について、まとめます。

使用しているデータは、下記のサイトを使用してダミーデータを作成しました。

動作環境

  • windows11

  • Jupyter Notebook 6.4.5

  • Python 3.9.7

実装

リストの要素確認

in演算子を用いて判定することができます。

car_makers = [
    'Land Rover',
    'Chevrolet',
    'Chevrolet',
    'Lamborghini',
    'Bentley',
    'Chevrolet',
    'Suzuki',
    'Cadillac',
    'BMW',
    'Isuzu',
    'Buick',
    'Buick',
    'Lexus',
    'Dodge',
    'Suzuki',
    'Dodge',
    'Jaguar',
    'Chevrolet',
    'Land Rover',
    'BMW'
]

print('BMW' in car_makers)

実行結果は、Trueとなり、要素が存在していることが確認できます。

リストの要素の存在確認の実行結果

辞書の要素確認

リスト同様、in演算子を使用することができます。
検索対象がキーかバリューかによって、指定の仕方が異なります。

キーの存在確認

辞書に対してin演算子を使用すると、キーが存在していることが確認できます。

car_data = {'car_maker': 'Chevrolet', 'car_model':'Suburban',  'year': 2008}
print('car_maker' in car_data)

バリューの存在確認

辞書型のメソッドvaluesを使用して、辞書のバリューを取得します。
その戻り値に対してin演算子を使用すると、バリューが存在していることが確認できます。

car_data = {'car_maker': 'Chevrolet', 'car_model':'Suburban',  'year': 2008}
print('Suburban' in car_data.values())
辞書の要素の存在確認の実行結果

辞書を要素としたリストの要素の存在確認

辞書を要素としたリストの場合、any関数を使用することで要素の存在確認を行います。

any関数は、引数で指定されたイテラブルなオブジェクトの要素が、いずれか1つでもTrueとなる場合にTrueを返す関数となります。

下記の例では、辞書を要素としたリストの中に、キー・car_makerのバリューが「Suzuki」となっている要素が存在するか?と判定しています。

car_datas = [
    {'car_maker': 'Land Rover', 'car_model':'Range Rover', 'year': 1994},
    {'car_maker': 'Chevrolet',  'car_model':'Suburban',    'year': 2008},
    {'car_maker': 'Chevrolet',  'car_model':'TrailBlazer', 'year': 2004},
    {'car_maker': 'Lamborghini','car_model':'Murciélago',  'year': 2008},
    {'car_maker': 'Bentley',    'car_model':'Brooklands',  'year': 2009},
    {'car_maker': 'Chevrolet',  'car_model':'Equinox',     'year': 2012},
    {'car_maker': 'Suzuki',     'car_model':'Swift',       'year': 1993},
    {'car_maker': 'Cadillac',   'car_model':'Catera',      'year': 1998},
    {'car_maker': 'BMW',        'car_model':'3 Series',    'year': 2012},
    {'car_maker': 'Isuzu',      'car_model':'Oasis',       'year': 1997},
    {'car_maker': 'Buick',      'car_model':'Electra',     'year': 1984},
    {'car_maker': 'Buick',      'car_model':'Electra',     'year': 1986},
    {'car_maker': 'Lexus',      'car_model':'IS-F',        'year': 2012},
    {'car_maker': 'Dodge',      'car_model':'Ram 2500',    'year': 2009},
    {'car_maker': 'Suzuki',     'car_model':'SJ 410',      'year': 1986},
    {'car_maker': 'Dodge',      'car_model':'Grand Caravan','year': 2009},
    {'car_maker': 'Jaguar',     'car_model':'XK Series',   'year': 2004},
    {'car_maker': 'Chevrolet',  'car_model':'Tahoe',       'year': 2000},
    {'car_maker': 'Land Rover', 'car_model':'Range Rover', 'year': 1992},
    {'car_maker': 'BMW',        'car_model':'5 Series',    'year': 2009}
]

print(any([car_data['car_maker'] == 'Suzuki' for car_data in car_datas]))

実行結果はTrueとなり、キー・car_makerのバリューが「Suzuki」となっている要素が存在することが確認できました。

辞書を要素としたリストの要素の存在確認の実行結果①

any関数の引数の指定は、リスト内包表記を使って、条件判定した結果をブール型(bool)のリストとして渡しています。

引数で渡しているリスト内包表記を単体で実行確認してみます。
条件判定の結果を見ると、条件判定がTrueとなっている要素が2つ存在していることも確認できます。

print([car_data['car_maker'] == 'Suzuki' for car_data in car_datas])
リスト内包表記の条件判定の実行結果①

逆に、要素が存在しない場合はどのようになるのかも確認してみます。
キー・car_makerのバリューが「Honda」となっている要素が存在するか?としています。

print(any([car_data['car_maker'] == 'Honda' for car_data in car_datas])

実行結果は、False、存在しないという結果が返ってきました。

辞書を要素としたリストの要素の存在確認の実行結果②

リスト内包表記の条件判定の中身を確認してみますと、すべてFalseとなっていることが確認できます。

リスト内包表記の条件判定の実行結果②

まとめ

今回は、Pythonで、辞書を要素としたリストの中に、特定条件に一致する要素が存在するかどうかを確認する実装について、まとめました。
any関数とリスト内包表記の組み合わせで実装することができました。

参考サイト


この記事が気に入ったらサポートをしてみませんか?