Ich habe zwei Wörterbücher. Beispielsweise:

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

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

Ich habe eine Funktion geschrieben, die alle Elemente in jeder Liste aus dict_b übernehmen und an der richtigen Stelle in dict_a platzieren kann. (Das heißt, dict_b 'Verben' werden in dict_a 'Verben' usw. usw. eingefügt.)

Ich muss jedoch auch eine Funktion schreiben, um dieselben Wörter aus dict_b herauszunehmen, wenn sie in dict_a sind, aber ich bin irgendwie verloren. Ich habe ein paar Dinge geschrieben, aber keines davon hat funktioniert. Ich erwarte nicht, dass jemand die Arbeit für mich erledigt, aber wenn jemand einen Hinweis hat, geben Sie ... Das wäre großartig.

1
Acour83 10 Okt. 2012 im 03:07

5 Antworten

Beste Antwort
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)
1
wim 9 Okt. 2012 im 23:57

Zunächst können Sie Diktatverständnisse verwenden, um beide Wörterbücher zusammenzuführen:

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

Oder ohne diktiertes Verständnis:

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

Das Entfernen der Elemente aus dem dict_b Wörterbuch ist einfach:

for key in dict_a:
    if dict_b.has_key(key):
        del dict_b[key]
0
Valdir Stumm Junior 10 Okt. 2012 im 00:06

Sie können pop verwenden, um das inspizierte Element aus der Liste zu entfernen.

Aber könnte ich vorschlagen:

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

.

Eine andere Option, die vorzuziehen sein kann, ist die umgekehrte Zuordnung (und dann können Sie update):

dict_c = {'run': 'verb', 'cat': 'noun',...}
dict_c = {'jump':'verb', 'human':'noun'}
dict_c.update(dict_d)
0
Andy Hayden 9 Okt. 2012 im 23:18

Wenn die Reihenfolge der Verben / Substantive nicht wichtig ist, ist es besser, anstelle Ihrer Listen Mengen zu verwenden

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

Ich bin mir nicht sicher, was der zweite Teil Ihrer Frage ist, aber es ist einfach, Elemente eines Satzes aus einem anderen zu entfernen

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

Dh. zurück zum Original dict_a

3
John La Rooy 10 Okt. 2012 im 00:47

list.remove (x)

Entfernen Sie das erste Element aus der Liste, dessen Wert x ist. Es ist ein Fehler, wenn es keinen solchen Artikel gibt.

In der Python-Dokumentation finden Sie hier. Das könnte reichen, wenn nicht, werde ich einige hinzufügen!

0
Johanna Larsson 9 Okt. 2012 im 23:10