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}