1

我有两本词典。例如:

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

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

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

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

4

5 回答 5

2

如果动词/名词的顺序不重要,最好使用集合代替您的列表

>>> 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'])}

IE。回到原来的dict_a

于 2012-10-10T00:41:57.043 回答
0
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)
于 2012-10-09T23:57:25.960 回答
0

首先,您可以使用dict 理解来合并两个字典:

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

或者,没有 dict 理解:

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]
于 2012-10-10T00:06:24.747 回答
0

list.remove(x)

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

从 Python 文档,这里. 可能就够了,如果没有,我再补充一点!

于 2012-10-09T23:10:33.677 回答
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)
于 2012-10-09T23:18:11.640 回答