ジュリアで辞書を逆にする方法は?



How Reverse Dictionary Julia



解決:

1つの方法は、理解を使用して、キーと値のペアを繰り返し処理し、途中でそれらを交換することによって、新しい辞書を作成することです。

julia> Dict(value => key for(key、value)in my_dict)Dict {String、String} with 3 entry: 'two' => 'B''one' => 'A''three' => 'C '

キーと値を交換するときは、次の点に注意してください。my_dictの値が重複しています(たとえば'A')の場合、新しい辞書のキー数が少なくなる可能性があります。また、キーによって見つけられた値新しい辞書の「A」は、期待したものではない可能性があります(Juliaの辞書は、簡単に決定できる順序で内容を保存しません)。




繰り返される値がキーとして衝突することを心配する必要がないと仮定すると、次のように使用できます。とマップ逆行する:

julia> my_dict = Dict( 'A' => 'one'、 'B' => 'two'、 'C​​' => 'three')Dict {String、String}、3つのエントリ: 'B' => 'two '' A '=>' one '' C '=>' three'julia> map(reverse、my_dict)Dict {String、String} with 3 entry: 'two' => 'B' 'one' => 'A '' 'スリー' => 'C' 

値が衝突する可能性のある辞書のために、これをしばらく前に作成しました



function invert_dict(dict、warning :: Bool = false)vals = collect(values(dict))dict_length = length(unique(vals))if dict_lengthキーが重複した場合にこれを使用すると、すべての値を含むリストが作成されるため、データが失われることはありません。

julia> a = [1,2,3] julia> b = ['a'、 'b'、 'b'] julia> Dict(zip(a、b))Dict {Int64、String}、3つのエントリ:2 => 'b' 3 => 'b' 1 => 'a' julia> invert_dict(ans)Dict {String、Array}、2つのエントリ: 'b' => Any [2,3] 'a' => Any [1]