1

辞書のリストを取得しましたが、それを別の辞書の値で並べ替えたいと思います。

これ

[{'fld':'a1', 'sortkey':'k2'}, {'fld':'b1', 'sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'d1', 'sortkey':'k3'}]

以下を使用する必要があります

[{'sortkey':'k1', 'value':9}, {'sortkey':'k2', 'value':10}, {'sortkey':'k3', 'value':7}]

次の結果が得られます

[ {'fld':'b1', 'sortkey':'k3'}, {'fld':'d1','sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'a1', 'sortkey':'k2'} ]
4

2 に答える 2

3

2番目のリストを、適切なパフォーマンスで実際に使用できるものに変換する必要があります。

sort_map = {d['sortkey']: d['value'] for d in secondlist}

sorted(firstlist, key=lambda d: sort_map[d['sortkey']])

sortkeyこれは、の各値について、2番目firstlistに一致するものがあることを前提としていますsortkey

これは与える:

>>> firstlist = [{'fld':'a1', 'sortkey':'k2'}, {'fld':'b1', 'sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'d1', 'sortkey':'k3'}]
>>> secondlist = [{'sortkey':'k1', 'value':9}, {'sortkey':'k2', 'value':10}, {'sortkey':'k3', 'value':7}]
>>> sort_map = {d['sortkey']: d['value'] for d in secondlist}
>>> sorted(firstlist, key=lambda d: sort_map[d['sortkey']])
[{'fld': 'b1', 'sortkey': 'k3'}, {'fld': 'd1', 'sortkey': 'k3'}, {'fld': 'c1', 'sortkey': 'k1'}, {'fld': 'a1', 'sortkey': 'k2'}]
于 2013-02-14T17:45:23.570 に答える
2

現在のリストにいくつかの名前を付けます。

data = [{'fld':'a1', 'sortkey':'k2'}, {'fld':'b1', 'sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'d1', 'sortkey':'k3'}]
sorts = [{'sortkey':'k1', 'value':9}, {'sortkey':'k2', 'value':10}, {'sortkey':'k3', 'value':7}]

まず、次のように変換sortsします。

{'k1': 9, 'k2': 10, 'k3': 7}

これは、次のコードで実行できます。

sorts_dict = {d['sortkey']: d['value'] for d in sorts}

次に、これを使用して最終的なリストを取得できます。

result = sorted(data, key=lambda d: sorts_dict.get(d['sortkey']))
于 2013-02-14T17:45:14.193 に答える