回答編集履歴

1 追記

hayataka2049

hayataka2049 score 21513

2018/08/30 08:48  投稿

dict.items()が返すジェネレータは`[(key1, value1), (key2, value2), ...]`という構造なので、その代入でキーと値に分けることはできない(正確にはシーケンスアンパックの数が合わない)というエラーです。
dict.items()が返すジェネレータは`[(key1, value1), (key2, value2), ...]`という構造なので、その代入でキーと値に分けることはできない(正確にはシーケンスアンパックの数が合わない)というエラーです。
---
やっぱりこういうのは再帰で書きたいな、ということで。
```python
target = {"foo": {"bar": "baz", "hogehoge": {"foofoo": "bazbaz"}}, "hoge": "fuga"} 
# mkgreiさん`target`をお借りしました。
print(target)
def dict_flatten(d, pref_key="", sep="_", result=None):
   if result is None:
       result = {}
   for k,v in d.items():
       if isinstance(v, dict):
           dict_flatten(v, pref_key=pref_key+k+sep, sep=sep, result=result)
       else:
           result[pref_key+k] = v
   return result
print(dict_flatten(target))
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る