2012-10-09 40 views
1

我有两个字典。例如:从字典中的列表中删除项目

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中,有点失落。我写了一些东西,但都没有工作。我并不期待任何人为我做这项工作,但如果有人给我一个提示......那太棒了。

+0

你的第二个问题看起来有点困惑,你能提供一些例子吗? –

+0

也许集合更适合列出 –

+0

你能澄清第二部分。如果您刚刚将所有从dict_b到动词dict_a的动词都添加了,然后从dict_b中删除了dict_a中的所有动词 - dict_b中的动词不会是空的吗? –

回答

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) 
+0

这几乎是我正在寻找的东西,尽管最后一行应该是dict_a,而不是_b,因为我期望从dict_a中删除这些东西。谢谢。 – Acour83

+0

我现在看到,如果他们在dict_a中,从“dict_b中取出那些相同的单词”可以用两种不同的方式来解释,这取决于您如何阅读!但是我很高兴这个功能足够清晰,你能够看到如何修改这个代码来实现你想要的。 – wim

0

list.remove(X)

从它的值是x中的列表中删除的第一项。 如果没有这样的项目,这是一个错误。

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

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) 
0

首先,你可以使用字典内涵合并这两个字典:

{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] 
+0

他们没有询问是否删除了整个键和值,只是从值 – wim

3

如果动词/名词的顺序不是项重要的,这是一个更好的主意来代替yourr列表中使用集合

>>> 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

+0

中删除选定的项目!我只是看着模块,这非常酷。我也很感谢你。 – Acour83