少し複雑ソリューション、それにもかかわらず:
>>> dicts = [{'language': 'de', 'suggestion': 'fressen', 'comment': 'for animals'},
... {'language': 'de', 'suggestion': 'essen', 'comment': ''},
... {'language': 'fr', 'suggestion': 'manger', 'comment': ''},
... {'language': 'fr', 'suggestion': 'bouffer', 'comment': 'slang'}]
>>> main_key = 'language'
>>> result_dict = dict()
>>> for d in dicts:
... for key, value in d.iteritems():
... if key == main_key:
... result_dict.setdefault(d[main_key], dict())[main_key] = value
... else:
... result_dict.setdefault(d[main_key], dict()).setdefault(key, list()).append(value)
...
>>> result_dict.values()
[{'comment': ['', 'slang'], 'language': 'fr', 'suggestion': ['manger', 'bouffer']}, {'comment': ['for animals', ''], 'language': 'de', 'suggestion': ['fressen', 'essen']}]
私たちは、このキーでリスト内の他のすべての辞書に参加main_key
値を上基づか。
ld = [{'language': 'de', 'suggestion': 'fressen', 'comment': 'for animals'},
{'language': 'de', 'suggestion': 'essen', 'comment': ''},
{'language': 'fr', 'suggestion': 'manger', 'comment': ''},
{'language': 'fr', 'suggestion': 'bouffer', 'comment': 'slang'}]
langs = {i['language'] for i in ld}
d = []
for lang in langs:
d.append({"language": lang})
for key in ld[0].keys() - ["language"]:
d[-1][key] = [i[key] for i in ld if i["language"] == lang]
print(d)
出力::
[{'comment': ['', 'slang'],
'language': 'fr',
'suggestion': ['manger', 'bouffer']},
{'comment': ['for animals', ''],
'language': 'de',
'suggestion': ['fressen', 'essen']}]
あなたがあなたの質問に彼のコメントに記述さFMCのデータ構造@使用することを選択した場合、すべてのdictsのキーが同じであると仮定し
あなたの最初のデータを構造(dictsのリスト)は合理的です:オブジェクトのリストやデータベースの行のリストに似ています。あなたの2番目のデータ構造はうまくいくと思われます。なぜなら、 'iith'の提案を' ith'コメントと同期させなければならない並列配列になるからです。言葉自体を第2レベルのキー(fressen、essenなど)として、トップレベルのキー(「de」、「fr」など)として言語を使用して、dictsのdictを考えましたか?値としてのコメント? – FMc
実際には、{{dictionary.language}}を使用するために、そのような辞書をテンプレートに簡単に使用できるようにしたいだけです。私は実際には、キーが動的である場合、どのようにコンテンツをレンダリングするのか分からない。 – Edouard