2010-11-08 77 views

回答

-1

我对Python一无所知,但我想你可以遍历一个列表并通过键从字典中删除条目?

11

[注意:这不是直接的答案,但先前猜测这个问题看起来像作业。我想提供帮助,而从中]

学习分解你的问题是,这将有助于解决这一问题:

  1. 如何从列表中得到一个元素
  2. 如何删除键:在字典值

更多帮助:

如何获取python列表中的所有元素?

对于所有序列和列表的循环工作是一个序列。

for key in sequence: print key 

如何删除在字典中的元素吗?

使用del(键)方法。

你应该能够在两个任务结合起来。

+3

你没有回答这个问题。你可能已经指出他朝着正确的方向发展,但并不是每个人都希望在追求知识的同时努力快速完成工作。 – Will 2013-08-20 21:52:30

+3

@Will:我明白。我是早期回答这个问题的人之一。从谈话来看,这看起来像是一个家庭作业问题。在Stackoverflow,我们劝阻回答这个问题,除非有人尝试过。我认为,我提供了一个很好的方向,可以让他保持良好状态,而不是提供切割n糊剂解决方案。我希望上下文有帮助。 – pyfunc 2013-08-20 22:22:14

7
map(dictionary.__delitem__, lst) 
+2

仅当lst中的所有内容都在字典中时才有用 - 否则您将在某处出现KeyError。尝试:'map(dictionary .__ delitem__,filter(dictionary .__ contains__,lst))'(尽管实际上,我不是使用'map'或list comps作为正常for循环的替代品。) – PaulMcG 2010-11-08 02:30:26

+0

@ Paul:我认为gnibbler希望答案或多或少正确,但大多不适合做作业...... :) – tzot 2010-11-08 20:01:10

+0

是的,我在其他家庭作业问题上也做了同样的事情。 – PaulMcG 2010-11-09 01:21:39

10
for key in list_: 
    if key in dict_: 
     del dict_[key] 
+0

不错,我不知道你可以做到这一点。认为你必须使用has_key。谢谢! btw,del dict_ [k]应该是del dict_ [key],对吧? – si28719e 2010-11-08 04:13:55

+4

@blackkettle:在Python 3中'dict_'中的键实际上是检查字典是否有某个给定键的唯一方法 - has_key()方法已被删除。 – 2010-11-08 06:10:08

+0

@blackkettle是!糟糕 – rossipedia 2010-11-08 06:42:42

1
newdict = dict(
    (key, value) 
    for key, value in olddict.iteritems() 
    if key not in set(list_of_keys) 
) 

之后(如在2012年年底):

keys = set(list_of_keys) 
newdict = dict(
    (key, value) 
    for key, value in olddict.iteritems() 
    if key not in keys 
) 

或者,如果您使用的是2.7+ Python字典理解:

keys = set(list_of_keys) 
newdict = { 
    key: value 
    for key, value in olddict.iteritems() 
    if key not in keys 
} 

或者甚至一个Python 2.7字典解析再加上一键交集:

required_keys = set(olddict.keys()) - set(list_of_keys) 
return {key: olddict[key] for key in required_keys} 

噢,这个问题很可能已经是我已经扭转计算所需的密钥的条件。

+0

您应该将'set(list_of_keys)'移到循环外部 – 2012-10-03 23:55:26

1
d = {'one':1, 'two':2, 'three':3, 'four':4} 
l = ['zero', 'two', 'four', 'five'] 
for k in frozenset(l) & frozenset(d): 
    del d[k] 
-1
for i in lst: 
    if i in d.keys(): 
     del(d[i]) 
+0

这将在每个步骤中为'd.keys()'构造一个列表或迭代器。你只需要'如果我在D:'这将是更短,更有效的方式来做到这一点,已经有这样的答案。 – 2017-03-04 14:36:36