正常思路:
下面展示一些 代码
。
c_key = {'林平之,林震南':2,'林震南,林平之':3,'任盈盈,令狐冲':4}
# c_key2用于保存无向图关系
# 复制字典(因为觉得一个地址的那种不太好所以没有直接等于,其实对结果没有啥影响)
c_key2 = c_key.copy()
for key in c_key:
# 将键值中的姓名分割,用于后面比较
name1 = key.split(',')
# 第二层循环,比较字典中元素
for key2 in c_key:
if key == key2:
continue
name2 = key2.split(',')
if name1[0]==name2[1] and name1[1]==name2[0]:
c_key2[key] += c_key2[key2]
c_key2.pop(key2)
break
// A code block
var foo = ‘bar’;
```javascript
// An highlighted block
var foo = 'bar';
总结一下上面的错误:字典遍历总是从头开始,所以删除的内容太多了,就比如代码中的字典,外层循环运行一次后,c_key2变成{‘林平之,林震南’:5,‘任盈盈,令狐冲’:4},第二次外层循环时,由于c_key没有删除元素,即还是{‘林平之,林震南’:2,‘林震南,林平之’:3,‘任盈盈,令狐冲’:4}那么就将要删除‘林平之,林震南’这组数据,删除这组数据,就会要把这个键对应的值加到包含姓名相同的键上,而c_key2中已经没有了这个键,所以就会报错,blabla说了这么多,其实就是删除了c_key2的数据,与c_key不匹配,所以报KeyError
下面展示一下改正了后的代码:
di = {'林平之,林震南':2,'林震南,林平之':3,'任盈盈,令狐冲':4}
keys = [key for key in di]
for i in range(len(keys)):
# 将键值中的姓名分割,用于后面比较
name1 = keys[i].split(',')
# 2次遍历,比较字典中元素
for j in range(i+1,len(keys)):
name2 = keys[j].split(',')
if name1[0]==name2[1] and name1[1]==name2[0]:
di[keys[i]] += di[keys[j]]
print('pop_list append:',keys[j])
di.pop(keys[j])
break
小错误也很烦,记录一哈,可能错的地方不一样,用不上,那就换一家,加油吧!