2017-06-01 55 views
2

我有两本字典,我需要删除词典1不中词典2.出现这种情况的关键是我的尝试:Python的去除不单独的字典发生字典键

d1 = {'id1':1, 
     'id2':1, 
     'id3':1, 
     'id4':1} 

d2 = {'id1':0, 
     'id2':0, 
     'id3':0, 
     'idnew':0} 

for k in (d1.keys()-d2.keys()): 
    del d1[k] 

print (d1) 

打印:

{'id1': 1, 'id2': 1, 'id3': 1} 

我的问题是:这是最快/最有效的方法来做到这一点?或者它构建套,这将需要长达做这样的事情

我的第2次尝试比需要更多的内存:

d1 = {k:v for k,v in d1.items() if k in d2} 
+3

你的第二次尝试将是我个人的最爱。 –

+0

为什么你不使用['timeit'](https://docs.python.org/2/library/timeit.html)来测试你的尝试? – ozgur

回答

1

过滤器和字典的理解可能是一个很好的方式去为这样的任务,虽然如果没有这个问题,这个问题很容易解决。

​​
0

词典理解可以有一个大词典时的性能打击。你可以删除它们只是遍历列表与for循环:

for key in set(d1) -set(d2): 
    del d1[key] 

,或者如果你知道你的类型的字典将是小,你可以使用字典理解。

d1 = {k: v for k, v in d1.items() if k in d2}

0

你解决是好事,因为:最快/内存使用效率最高的问题来自于价值型和尺寸的。 这可以通过python调试器查看和设置。