Skip to main content

ディクショナリにキーを追加した版のディクショナリがほしいとき

解法

py
dict2 = { 'key1': val1, **v }

背景. やりたいこと

こういうディクショナリがあったとして

langs_dict
{
'python' : { 'disp_name': 'Python' , 'order': 1 },
'swift' : { 'disp_name': 'Swift' , 'order': 2 },
...
}

↓ こういう、ディクショナリ入りの配列にしたいという話

langs_array
[
{ 'lang_name': 'python', 'disp_name': 'Python', 'order': 1 },
{ 'lang_name': 'swift', 'disp_name': 'Swift', 'order': 2 },
...
]

なぜかというと、
テンプレートに渡すために並べ替えてループしようなどと思うと、
ディクショナリのキー (lang_name部分) の情報が落ちるので。

関連した操作の具体例

py
# 変換する
langs_array = [{ 'lang_name': k, **v } for k, v in langs_dict.items()]

# フィルタしつつ変換する (langnames_set という set にあるものだけ)
langs_array = [{ 'lang_name': k, **v } for k, v in langs_dict.items() if k in langnames_set]

# 並べ替える
langs_array.sort(key=lambda x: x['order'])

# あとからフィルタする場合
langs_array = [x for x in langs_array if x['lang_name'] in langnames_set]