从字典中的列表中删除项目

时间:2012-10-09 23:07:16

标签: python list dictionary

我有两本词典。例如:

dict_a = {'verbs': ['run', 'go', 'eat'], 'nouns':['dog', 'cat', 'bear']}

dict_b = {'verbs': ['jump'], 'nouns': ['human']}

我编写了一个函数,可以从dict_b获取每个列表中的所有项目,并将它们放入dict_a中的正确位置。 (即,dict_b'动词'将进入dict_a'动词'等等......)

但是我还需要写一个函数来从dict_b中取出那些相同的单词,如果它们在dict_a中,但我有点迷失。我写了一些东西,但没有一个有效。我不希望任何人为我做这项工作,但如果有人有提示......那就太棒了。

5 个答案:

答案 0 :(得分:3)

如果动词/名词的顺序不重要,那么最好使用集合来代替你的名单

>>> dict_a = {'verbs': {'run', 'go', 'eat'}, 'nouns':{'dog', 'cat', 'bear'}}
>>> dict_b = {'verbs': {'jump'}, 'nouns': {'human'}}
>>> for k in dict_a:
...  dict_a[k] |= dict_b[k]
... 
>>> dict_a
{'verbs': set(['go', 'jump', 'run', 'eat']), 'nouns': set(['human', 'dog', 'bear', 'cat'])}

我不太清楚问题的第二部分是什么,但很容易从另一部分删除一组

>>> for k in dict_a:
...  dict_a[k] -= dict_b[k]
... 
>>> dict_a
{'verbs': set(['go', 'run', 'eat']), 'nouns': set(['dog', 'bear', 'cat'])}

即。回到原来的dict_a

答案 1 :(得分:1)

dict_a = {'verbs': ['run', 'go', 'eat'], 'nouns':['dog', 'cat', 'bear']}
dict_b = {'verbs': ['jump'], 'nouns': ['human']}

def foo(dict_a, dict_b):
  for k,v in dict_b.iteritems():
    for word in v[:]:
      if word in dict_a.get(k, []):
        dict_b[k].remove(word)

答案 2 :(得分:0)

  

list.remove(x)

     

从列表中删除值为x的第一项。   如果没有这样的项目,则会出错。

从Python文档中here。这可能就够了,如果没有,我会添加一些!

答案 3 :(得分:0)

您可以使用pop从列表中删除被检查的元素。

虽然我可以建议:

dict_a['verbs'] = dict_a['verbs'] + dict_b['verbs']
dict_a['nouns'] = dict_a['nouns'] + dict_b['nouns']

另一种选择,可能更可取的是以另一种方式进行映射(然后你可以update):

dict_c = {'run': 'verb', 'cat': 'noun',...}
dict_c = {'jump':'verb', 'human':'noun'}
dict_c.update(dict_d)

答案 4 :(得分:0)

首先,您可以使用 dict comprehensions 来合并这两个词典:

{key:dict_a[key] + dict_b[key] for key in dict_b if dict_a.has_key(key)}

或者,没有字面理解:

for key in dict_b:
    if dict_a.has_key(key):
        dict_a[key] += dict_b[key]

dict_b字典中删除项目很简单:

for key in dict_a:
    if dict_b.has_key(key):
        del dict_b[key]