簡體   English   中英

遍歷嵌套字典

[英]Iteration through nested dictionary

假設我有一個字典,其中第一個鍵是呼叫者的電話號碼,第二個字典的鍵是呼叫接收者的電話號碼,值是電話通話的持續時間(以秒為單位)。 我想在同一個字典中將 append 也作為第一個鍵的呼叫接收者的電話號碼,而不是與該號碼聯系的所有號碼作為嵌套字典的鍵,以及每個號碼的所有呼叫的持續時間作為值。 此外,如果嵌套字典的鍵已經是字典的第一個鍵,它應該在現有持續時間上添加電話通話的持續時間實際上,我想要一個“電話列表字典”,其中記錄了出現的每個電話號碼,他和誰一起正在談話以及與那個人談話多長時間。 我的字典看起來如何:

dict={'123456789': {'132456789': 583, '123546789': 444, '257918896': 528, '111111111': 495,}, '296358741': {'132456789': 631, '123456789': 98, '456789123': 395}, 111111111:{'123456789':150}}

我想要它的樣子(當我把 + 我認為這個操作的結果應該是值:

dict={'123456789': {'132456789': 583, '123546789': 444, '257918896': 528, '111111111': 495+150,'296358741':98}, '296358741': {'132456789': 631, '123456789': 98, '456789123': 395}, '132456789':{'123456789':583,'296358741':631},'111111111':{'123456789':495+150}, '296358741':{'123456789':98}, '456789123':{'296358741':395}, '123546789': {'123456789':444}, '257918896' :{'123456789':528}}

我試過這個:

for k in dict:
    for called in dict[k]:
        if called not in dict:
            dict[called]={k:dict[k][called]}
        else:
            if k in dict[called]:
                dict[called][k]+=dict[k][called]
            else:
                dict[called]={k:dict[k][called]}
print(dict)

但它不起作用,並且 output error: RuntimeError: dictionary changed size during iteration 有沒有更簡單的方法來做到這一點。 我是初學者,我通過嵌套字典搜索了以前關於迭代的帖子,但我找不到任何可以在這里應用的東西。

有沒有更簡單的方法來做到這一點?

在遍歷可迭代實體時改變它的結構從來都不是一個好主意,而且通常不是不可能的。 關於迭代器應如何處理這些更改,會出現許多無法回答的問題。 您可以做的是創建一個新的可迭代實體(在本例中是一個全新的字典,您可以在迭代時添加每個(鍵,值)項:

new_dict = {}
for caller, call_log in dict:
    new_dict[caller] = call_log 
    for receiver, duration in call_log:
        new_dict[receiver] = {caller: duration}
print(new_dict)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM