如何访问变异词典:
我有两个字典完全相互复制。基于几个条件,我要求在循环期间删除少量元素。删除发生但字典迭代每个元素,我明白为什么,但我想知道是否有任何可以做的事情来避免删除键的额外循环。
例如
a={0:{1,2,3}, 1:{2,3,4}, 2:{6,7,8}, 3:{3,4,5}, 4:{7,8,9}}
b={0:{1,2,3}, 1:{2,3,4}, 2:{6,7,8}, 3:{3,4,5}, 4:{7,8,9}}
for key, values in a.items():
print key , a
for key2, values2 in b.items():
if key==0 and key2==3:
del a[3]
if key==1 and key2==2:
del a[2]
当计算上述代码的输出时,我得到以下内容:
0 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 2: set([8, 6, 7]), 3: set([3, 4, 5]), 4: set([8, 9, 7])}
1 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 2: set([8, 6, 7]), 4: set([8, 9, 7])}
2 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 4: set([8, 9, 7])}
3 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 4: set([8, 9, 7])}
4 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 4: set([8, 9, 7])}
对于我在循环中删除的2和3的所有行都进行了迭代。
我想要的输出有点类似于
0 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 2: set([8, 6, 7]), 3: set([3, 4, 5]), 4: set([8, 9, 7])}
1 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 2: set([8, 6, 7]), 4: set([8, 9, 7])}
4 {0: set([1, 2, 3]), 1: set([2, 3, 4]), 4: set([8, 9, 7])}
我如何使用字典,我想使用字典,因为字典中删除的平均情况复杂度是o(1)其中列表中的相同是o(n)......
由于我的数据集太大,我需要一种优化的方法。
提前致谢
答案 0 :(得分:1)
循环时,无法更改字典大小。当你使用:
for key, values in a.items():
...
a.items()
以list
格式返回[(key1, value1), (key2, value2).....]
。所以你没有在字典上进行交流。
这就是为什么即使你删除字典元素a.items()
仍然得到它,你输出相同。
回答你关于有效地做这件事的问题:在字典上迭代你不能。但是,如果您确定要删除的key
。然后你可以简单地使用:
if key in a:
del a[key]