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 :(得分: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]