2012-10-09 49 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