1
input = { "a" : { "x": 1, "y": 2 },
     "b" : { "x": 3, "z": 4 } }
output = {'y': {'a': 2},
                'x': {'a': 1, 'b': 3},
                'z': {'b': 4} }

入力を指定して新しい辞書を作成する必要があり、それが出力として出力されるはずです。これまで私は書いてきました:

def pivot_nested_dict(nested_dict):
5       stateDict={}
6       for i in nested_dict:
7           dict2=nested_dict[i]
8           for j in dict2:
9               stateDict[j]= {i: dict2[j]}
10      return stateDict
11  
12  print pivot_nested_dict(input)

出力={'y': {'a': 2}, 'x': {'b': 3}, 'z': {'b': 4}}. つまり、x キーは 'a' を上書きしています: 1. a と b の両方を保持するにはどうすればよいですか?

4

4 に答える 4

1

私はこれを持っています

input = { "a" : { "x": 1, "y": 2 },
     "b" : { "x": 3, "z": 4 } }

output = {}

for k,v in zip(input.keys(), input.values()):
    for kk, vv in zip(v.keys(), v.values()):
        if kk in output.keys():
            output[kk][k] = vv
        else:
            output[kk] = {k : vv}
于 2013-11-15T08:06:58.980 に答える
1

ディクショナリを複製する以外に、指定されたキーに対応する値を変更すると、元の値をディクショナリに保持する方法はありません。

たとえば、以下の上書きは、データ構造がどれほど複雑であっても常に発生します。

x = {'a':1}
x['a'] = 2
print x
>>> {'a': 2}

複製することはできますが、元の値は手動で管理する必要があります。

x = {'a':1}
x,oldx = x,x.copy()
oldx['a'] = 2
print x, oldx
>>> {'a': 2} {'a': 1}

値は、配列や辞書を含む任意のタイプの構造にすることができるという事実を利用して、値の連続する各変更を保存できます。

于 2013-11-15T05:01:44.823 に答える
1

私はあなたの仕事を成し遂げるために、この小さなスクリプトを持っています。
: 入力が正しい場合。

コード:

output = {}
for d in input.items():
    for item in d:
        if type(item) == dict:
            for i in item.keys():
                d = {k:item[i]}
                output[i] = {k:item[i]} if not i in output.keys() else dict(output[i].items() + d.items())
        else: k=item  

入力:

input = { "a" : { "x": 1, "y": 2 ,'z':15},"b" : { "x": 3, "z": 4 } }

出力:

{'y': {'a': 2}, 'x': {'a': 1, 'b': 3}, 'z': {'a': 15, 'b': 4}}  

お役に立てれば :)

于 2013-11-15T05:40:26.720 に答える
1

これに必要なのは、キーが既に にあるかどうかを確認することですstateDict。ある場合は、ネストされた辞書に新しい要素を追加します。

def pivot_nested_dict(nested_dict):
    stateDict = {}
    for i in nested_dict:
        dict2 = nested_dict[i]
        for j in dict2:
            if j not in stateDict:
                stateDict[j] = {i: dict2[j]}
            else:
                stateDict[j][i] = dict2[j]
    return stateDict

print pivot_nested_dict(inp)
于 2013-11-15T05:06:53.677 に答える