ディクショナリにキーを追加した版のディクショナリ がほしいとき
解法
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]