0

私は2つの辞書を持っています

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

Dict1 = {0 : {'a0' : 0,'a1' : 1,'a2' : 2},
         1 : {'b0' : 0,'b1' : 1,'b2' : 2},
         2 : {'c0' : 0,'c1' : 1,'c2' : 2}}

のキーを の値として使用し、 の値を のCombDictキーとして使用する結合辞書を取得したいと思います。Dict0CombDictDict1CombDict

CombDict = {{'a0':0,'a1':1,'a2':2}:'a',{'b0':0,'b1':1,'b2':2}'b',{'c0':0,'c1':1,'c2':2}:'c'}

私はそれが非常に基本的であることを知っています。私の論理コードは書かれていますが、間違いなく間違っています。

CombDict = {}
for k0, v0 in Dict0:
    CombDict.values()= k0
    for k1,v1  in Dict1:
        CombDict.keys() = v1

なにか提案を?ありがとう。ところで、辞書をより意味のあるものにしたい場合は、編集してください。

4

1 に答える 1

2

辞書は可変であるため、辞書を別の辞書のキーとして使用したり、セットに格納したりすることはできません。

代わりに、辞書の不変の「スナップショット」をキャプチャする必要があります。

def dict_to_key(d):
    return tuple(sorted(d.items()))

ディクショナリの値も可変でない場合は、dict_to_key()代わりに関数の戻り値をキーとして使用できます。

これで、結合された辞書を作成できます。

CombinedDict = {dict_to_key(Dict1[v]): k for k, v in Dict0.items()}

デモ:

>>> Dict0 = {'a':0, 'b':1, 'c':2}
>>> Dict1 = {0 : {'a0' : 0,'a1' : 1,'a2' : 2},
...          1 : {'b0' : 0,'b1' : 1,'b2' : 2},
...          2 : {'c0' : 0,'c1' : 1,'c2' : 2}}
>>> def dict_to_key(d):
...     return tuple(sorted(d.items()))
... 
>>> {dict_to_key(Dict1[v]): k for k, v in Dict0.items()}
{(('b0', 0), ('b1', 1), ('b2', 2)): 'b', (('a0', 0), ('a1', 1), ('a2', 2)): 'a', (('c0', 0), ('c1', 1), ('c2', 2)): 'c'}
于 2013-07-19T12:47:00.733 に答える