け日記

最近はPythonでいろいろやってます

Python: リストのリスト・辞書のリストを展開 (flat) するワンライナー

[[...], [...], [...]] -> [..., ..., ...] としたいケースです。

内包表記は多重ループ可能なので、ワンラインで展開できます。

list_in_list = [[0, 1, 2], [3, 4], [5, 6, 7, 8]]

flatten_list = [v for child_list in list_in_list for v in child_list]
# -> [0, 1, 2, 3, 4, 5, 6, 7, 8]

辞書のリストも同様に展開できます。

dict_in_list = [{"A": 0, "B": 1, "C": 2}, {"D": 3, "E": 4}]

flatten_dict = {k: v for child_dict in dict_in_list for k, v in child_dict.items()}
# -> {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4}

キー名が被るとリストの最後の値で上書きされますので注意です。

# キー C が被っている
dict_in_list = [{"A": 0, "B": 1, "C": 2}, {"D": 3, "C": 4}]

flatten_dict = {k: v for child_dict in dict_in_list for k, v in child_dict.items()}
# -> {'A': 0, 'B': 1, 'C': 4, 'D': 3}