假设我有一个字典,其中第一个键是呼叫者的电话号码,第二个键是呼叫接收者的电话号码,值是以秒为单位的呼叫持续时间。我还想在同一字典中追加呼叫接收者的电话号码作为第一个键,然后将与该号码联系的所有号码作为嵌套字典的键,并将每个号码的所有呼叫持续时间作为值。另外,如果嵌套字典的键已经是字典的第一个键,它应该在现有的持续时间上添加电话通话的持续时间。实际上,我想要一个'电话列表字典',其中记录了出现的每个电话号码,他正在与谁交谈以及与那个人交谈了多长时间。我的字典是什么样子的:
dict={'123456789': {'132456789': 583, '123546789': 444, '257918896': 528, '111111111': 495,}, '296358741': {'132456789': 631, '123456789': 98, '456789123': 395}, 111111111:{'123456789':150}}
我想让它看起来是什么样子(当我输入+时,我认为这个操作的结果应该是value:
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)
但是不工作,输出错误:RuntimeError: dictionary changed size during iteration。有更简单的方法吗?我是初学者,我搜索了以前关于通过嵌套字典迭代的帖子,但我找不到任何我可以在这里应用的东西。
有更简单的方法吗?
这从来都不是一个好主意,而且在迭代一个可迭代实体的时候,往往不可能改变它的结构。关于迭代器应该如何处理这些更改,出现了许多无法回答的问题。你能做的是创建一个新的可迭代实体(在本例中是一个全新的字典),在迭代时添加每个(key, value)项:
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)