1

Pythonのインデックスの辞書に従ってリストを再配置する関数を作成するにはどうすればよいですか?

例えば、

    L=[('b',3),('a',2),('c',1)]

    dict_index={'a':0,'b':1,'c':2}

のリストが欲しい:

   [2,3,1]

ここで、2は「a」から、3は「b」から、1は「c」からですが、dict_indexに従ってLの数値のみを再配置します。

4

3 に答える 3

1

これを試してください(より簡単なソリューションで編集):

L=[('b',3),('a',2),('c',1)]

dict_index={'a':0,'b':1,'c':2}

# Creates a new empty list with a "slot" for each letter.
result_list = [0] * len(dict_index)

for letter, value in L:
    # Assigns the value on the correct slot based on the letter.
    result_list[dict_index[letter]] = value

print result_list # prints [2, 3, 1]
于 2012-11-22T03:19:33.290 に答える
1

リスト内包表記の使用:

def index_sort(L, dict_index):
    res = [(dict_index[i], j) for (i, j) in L]     #Substitute in the index
    res = sorted(res, key=lambda entry: entry[0])  #Sort by index
    res = [j for (i, j) in res]                    #Just take the value

    return res
于 2012-11-22T03:31:03.617 に答える
1

sortedリストの.sort()メソッドはkeyパラメータを取ります:

>>> L=[('b',3),('a',2),('c',1)]
>>> dict_index={'a':0,'b':1,'c':2}
>>> sorted(L, key=lambda x: dict_index[x[0]])
[('a', 2), ('b', 3), ('c', 1)]

など

>>> [x[1] for x in sorted(L, key=lambda x: dict_index[x[0]])]
[2, 3, 1]

するべきです。より興味深い例として、あなたの例はたまたまアルファベット順と数字順が一致しているため、実際に機能していることを確認するのは困難dict_indexです。少しシャッフルできます。

>>> dict_index={'a':0,'b':2,'c':1}
>>> sorted(L, key=lambda x: dict_index[x[0]])
[('a', 2), ('c', 1), ('b', 3)]
于 2012-11-22T03:23:32.693 に答える