0

任意のインデックスのセットを、インデックスが 0 で始まる別のセットにマッピングしています。今のところ、次のコードを使用してそれを行いました (暗号が解決策です)。

[In]  t = [(3, 1, 2, 2), (3, 2, 4, 4), (6, 3, 4, 4)]  ## Original set indexes
[Out] r =  set ([i for sublist in t for i in sublist] )
[In]  r =  set([1, 2, 3, 4, 6])                       ## Set of indexes
[In]  cipher = dict(zip(r, range(len(r))))
[Out] cipher {1: 0, 2: 1, 3: 2, 4: 3, 6: 4}           ## Solution (Mapping key)

ただし、辞書のキーは一意でなければならないため、セットを使用せずに「暗号」を作成しようとしています。

[In]  t = [(3, 1, 2, 2), (3, 2, 4, 4), (6, 3, 4, 4)]  ## Original set indexes
[Out] r =  [i for sublist in t for i in sublist] 
[In]  r =  [3, 1, 2, 2, 3, 2, 4, 4, 6, 3, 4, 4]       ## Flattened list
[In]  cipher = dict(zip(r, 'count +1 for each new key' ))
[Out] cipher {1: 0, 2: 1, 3: 2, 4: 3, 6: 4}           ## Mapping key

したがって、辞書に追加されたキーごとに、その時点での辞書の長さに等しい値を追加します。それが可能かどうかわかりませんか?

編集

Martijn Pieters がここで言っていることを実行しましたが、キーと値が入れ替わって、最後に -1 キーが追加されました。それは私には少し進歩しすぎているように思えるので、私は自分が持っているもので行くつもりです.

from collections import defaultdict
from itertools import count
from functools import partial

keymapping = defaultdict(partial(next, count(-1)))
outputdict = {keymapping[v]: v for v in r}

[Out] {0: 2, 1: 3, 2: 4, 3: 6, -1: 1}
4

1 に答える 1