Python – 行列から辞書キーとして使える不変(イミュータブル)な行をフィルタリングする方法
行列(リストのリスト)の中から、辞書のキーとして使用できる不変(イミュータブル)な要素のみで構成される行をフィルタリングしたい場合、リスト内包表記とisinstanceメソッドを組み合わせることで簡単に実現できます。
Pythonでは、辞書のキーにはint、float、str、tuple、boolなどの不変(イミュータブル)なデータ型しか使用できません。一方、リストや辞書のような可変(ミュータブル)な型はキーにすることができません。この性質を利用して、各行のすべての要素が不変型であるかどうかを判定し、条件を満たす行だけを抽出します。
サンプルコード
my_list = [[24, 15, [32, 33, 12]], ["pyt", 8, (14, 54)], [{15:24}, 13, "fun"], [True, "cool"]]
print("The list is :")
print(my_list)
my_result = [row for row in my_list if all(isinstance(element, int) or isinstance(element, bool) or isinstance(element, float) or isinstance(element, tuple) or isinstance(element, str) for element in row)]
print("The result is :")
print(my_result)出力
The list is :
[[24, 15, [32, 33, 12]], ['pyt', 8, (14, 54)], [{15: 24}, 13, 'fun'], [True, 'cool']]
The result is :
[['pyt', 8, (14, 54)], [True, 'cool']]解説
まず、さまざまなデータ型を含むネストされたリスト(リストのリスト)を定義し、コンソールに表示します。
リスト内包表記を使って各行を反復処理し、isinstanceメソッドで各要素が特定のデータ型(int、bool、float、tuple、str)に属しているかどうかを確認します。
all()関数により、行内のすべての要素が不変型である場合にのみ、その行が結果のリストに格納され、変数my_resultに代入されます。
この例では、リスト[32, 33, 12]や辞書{15: 24}は可変(ミュータブル)な型のため、それらを含む行は除外されます。最終的な結果がコンソールに出力されます。
-
キーと値のリストからPython辞書(dict)を作成する方法
キーリストと値リストから辞書を作成する Pythonでは、キーを格納したリスト(L1)と、それに対応する値を格納したリスト(L2)が別々に用意されている場合でも、いくつかの簡単な方法で1つの辞書オブジェクトにまとめることができます。 ここでは、代表的な2つの方法を紹介します。 方法1:zip()関数とdict()関数を組み合わせる 最もシンプルで一般的なのが、zip()で2つのリストをペア化し、dict()関数で辞書に変換する方法です。 >>> L1 = [a,b,c,d] >>> L2 = [1,2,3,4] >>> d = dict(
-
Pythonの辞書からすべてのキーをリストとして取得する方法
Pythonの辞書(dict)からすべてのキーをリストとして取得したい場合、最もシンプルな方法は dict.keys() メソッドを使うことです。このメソッドは辞書内のすべてのキーを含むビューオブジェクトを返すため、list() で囲むことで簡単にリストへ変換できます。keys()メソッドを使う例my_dict = {name: TutorialsPoint, time: 15 years, location: India} key_list = list(my_dict.keys()) print(key_list)出力実行すると、次のような結果が得られます。[name, time, loc