我有一個如下的python字典:
j = {'a':'b',
'c':'d',
'e':'f',
'd':'g',
'h':'i',
'b':'j',
'g':'k'}
鍵是 old_id,值是 new_id。當 new_id 再次更新時,一些值再次作為鍵重復。我想更新字典,使鍵具有最新的值。
我希望我的新字典看起來像這樣:
j = {'a':'j',
'c':'k',
'e':'f',
'd':'k',
'h':'i',
'b':'j',
'g':'k'
}
PS:請注意,這只是樣本資料。我只有最初的字典可供我使用。
uj5u.com熱心網友回復:
如果您不必就地執行此操作(即在迭代 dict 時應該更早地計算您的替換(請注意,默認情況下有序的 dicts 在 cpython 3.6 之前不是一個東西)),您可以執行以下操作:
j = {'a':'b',
'c':'d',
'e':'f',
'd':'g',
'h':'i',
'b':'j',
'g':'k'}
converted = {}
for d_key in j:
current = d_key
while current in j:
current = j[current]
converted[d_key] = current
print(converted)
零件跟蹤替換直到用盡(當current新鍵不再在表中時。
如果您想就地執行它,請替換converted為j- 只要您只使用鍵并且不添加任何新鍵(在迭代結構時修改結構通常是不允許的),您應該沒問題。
uj5u.com熱心網友回復:
只需執行一個回圈并繼續檢查值是否作為字典中的鍵存在。如果不是,則使用該值更新該值,否則再次使用回圈
j = {'a':'b',
'c':'d',
'e':'f',
'd':'g',
'h':'i',
'b':'j',
'g':'k'}
for k, v in j.items():
while v in j:
v = j[v]
j[k]= v
print(j)
輸出
{'a': 'j',
'c': 'k',
'e': 'f',
'd': 'k',
'h': 'i',
'b': 'j',
'g': 'k'
}
uj5u.com熱心網友回復:
for k in j.keys():
for k2 in j.keys():
if j[k] == k2:
j[k] = j[k2]
因此,您遍歷所有鍵(k2)并測驗是否有任何值與 k 匹配,如果它們替換它們。所以 O(n2),效率不高。但它有效。
uj5u.com熱心網友回復:
IIUC,您需要DFS algorithm并且可以使用 recursive approach以下方式執行此操作:
dct = {'a':'b', 'c':'d', 'e':'f', 'd':'g', 'h':'i', 'b':'j', 'g':'k'}
def new_dct(dct):
def dfs(k):
if k in dct:
return dfs(dct[k])
return k
n_dct = {}
for k,v in dct.items():
n_dct[k] = dfs(v)
return n_dct
print(new_dct(dct))
輸出:
{'a': 'j', 'c': 'k', 'e': 'f', 'd': 'k', 'h': 'i', 'b': 'j', 'g': 'k'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/491717.html
標籤:Python python-3.x 字典 for循环 嵌套循环
