2016-12-13 3 views
0

Ich habe folgende Listen von Tupeln:Probleme beim Versuch, eine Liste von Tupeln zu ersetzen?

list1 = [('the', 'a'), ('over','1'), ('quick','b'),('fox', 'c'), ('brown', 'd'), ('dog','e'), ('jumps','2')] 

Ich versuche, einige Tupel zu ersetzen, wie folgt (*):

('the', 'a') -> ('the', 'ART') 
('quick','b') -> ('quick','VERB') 
('fox', 'c') -> ('fox', 'ANIMAL') 

Mit anderen Worten, die Tupel von list1 sollte dergleichen ersetzt werden dies:

list1 = [('the', 'ART'), ('over','1'), ('quick','VERB'),('fox', 'ANIMAL'), ('brown', 'd'), ('dog','e'), ('jumps','2')] 

Also habe ich versucht, mit der folgenden Funktion:

def replace_val(alist, key, value): 
    return [(k,v) if (k != key) else (key, value) for (k, v) in alist] 

Das Problem ist, dass ich nicht alle neuen Tupel aus (*) in einer Bewegung passieren kann, muss ich tun:

replace_val(list1, 'the', 'ART') 
replace_val(list1, 'quick', 'VERB') 
replace_val(list1, 'fox', 'ANIMAL') 

So meine Frage ist: Wie kann ich effizient in einem ersetzen Bewegung alle neuen Tupel aus (*), um ?:

[('the', 'ART'), ('over','1'), ('quick','VERB'),('fox', 'ANIMAL'), ('brown', 'd'), ('dog','e'), ('jumps','2')] 
+0

Sie könnten Wörterbücher anstelle der Liste der Tupel verwenden, wenn Ihr Schlüssel der gleiche ist – SarathSprakash

Antwort

2

Ich denke, das würde helfen.

list1 = [('the', 'a'), ('over','1'), ('quick','b'),('fox', 'c'), ('brown', 'd'), ('dog','e'), ('jumps','2')] 
list2 = [('the', 'a'), ('over','1'), ('quick','b'),('fox', 'c'), ('brown', 'Dog'), ('dog','e'), ('jumps','2')] 
z=(dict(dict(list1),**dict(list2)).items()) 
print(z) 

DEMO

1
list1 = [('the', 'a'), ('over','1'), ('quick','b'),('fox', 'c'), ('brown', 'd'), ('dog','e'), ('jumps','2')] 
dict1 = dict(list1) 
print(dict1) 
dict1['the'] = 'ART' 
dict1['quick'] = 'VERB' 
dict1['fox'] = 'ANIMAL' 
print(dict1) 
list2 = [i for i in dict1.items()] 
# or 
list2 = list(dict1.items()) 

print(list2) 

heraus zu bekommen:

{'the': 'a', 'fox': 'c', 'brown': 'd', 'dog': 'e', 'quick': 'b', 'jumps': '2', 'over': '1'} 
{'the': 'ART', 'fox': 'ANIMAL', 'brown': 'd', 'dog': 'e', 'quick': 'VERB', 'jumps': '2', 'over': '1'} 
[('the', 'ART'), ('fox', 'ANIMAL'), ('brown', 'd'), ('dog', 'e'), ('quick', 'VERB'), ('jumps', '2'), ('over', '1')] 
+0

Woops, offenbar war dies bei weitem eine bessere Lösung. – tumbleweed

+1

ich aktualisiere den code –

+1

Sie könnten tun 'liste (dict1.items())' statt Listen Verständnis –

1

Wenn Sie es das einfach und schlicht Weise tun wollen, hier ist eine:

>>> list1 = [('the', 'a'), ('over','1'), ('quick','b'),('fox', 'c'), ('brown', 'd'), ('dog','e'), ('jumps','2')] 
>>> 
>>> list2 = [('the', 'ART'), ('quick', 'VERB'), ('fox', 'ANIMAL')] 
>>> 
>>> list3 = [] 
>>> d1 = dict(list1) 
>>> d2 = dict(list2) 
>>> 
>>> for k in d1: 
     if k not in d2: 
      list3.append((k, d1[k])) 
     else : 
      list3.append((k, d2[k])) 


>>> list3 
[('jumps', '2'), ('dog', 'e'), ('brown', 'd'), ('the', 'ART'), ('fox', 'ANIMAL'), ('over', '1'), ('quick', 'VERB')] 

ein Wörterbuch aus der Liste von Tupeln Erstellen wird Lookup entlang beide machen Listen sehr schnell und einfach, dann müssen Sie nur die entsprechenden Werte zu Ihren Suchkriterien nehmen.