0

2 セットのエンティティ間で隣接リストを維持しています

dict1={'x1':[y1,y2],'x2':[y2,y3,y4]...}
dict2={'y1':[x1],'y2':[x1,x2],'y3':[x2]....}

新しいエントリが入ってくると、辞書を更新するための推奨される方法は何ですか?
エントリが 'x3':[y2,y4] であると仮定します。
x3 が常に新しい頂点であるとは限らないことに注意してください。

4

3 に答える 3

0

update()次のコードの関数はどうですか。

dict1={'x1':['y1','y2'],'x2':['y2','y3','y4']}

def mkdict2():
    dict2={}
    for x,ylist in dict1.items():
        for y in ylist:
            dict2[y] = list(dict2.get(y,[])) + [x]
    return dict2

dict2 = mkdict2()

print (dict1)
print (dict2)

def update(x,ylist):
    dict1[x] = list(dict1.get(x,[])) + ylist
    for y in ylist:
        dict2[y] = list(dict2.get(y,[])) + [x]

update('x3',['y2','y4'])

print (dict1)
print (dict2)

これにより、次の出力が得られます。

 {'x1': ['y1', 'y2'], 'x2': ['y2', 'y3', 'y4']}
 {'y3': ['x2'], 'y2': ['x1', 'x2'], 'y1': ['x1'], 'y4': ['x2']}
 {'x1': ['y1', 'y2'], 'x2': ['y2', 'y3', 'y4'], 'x3': ['y2', 'y4']}
 {'y3': ['x2'], 'y2': ['x1', 'x2', 'x3'], 'y1': ['x1'], 'y4': ['x2', 'x3']}

同じデータを含む 2 つのデータ構造を保持することに常に神経質になっているため、整合性が取れなくなった場合に備えて、最初からmkdict2()生成するために を使用しています。dict2dict1

于 2013-06-27T05:18:36.433 に答える