2016-06-28 4 views
1

Ich habe ein Wörterbuch genannt, sagen wir, tempDict, die als solche gefüllt ist:Merge Werte Wörterbuch in einem, wenn Schlüssel Paßgenauigkeitsbedingung

tempDict = {'a': 100, 'b': 200, 'c': 120, 'b_ext1': 4, 'd': 1021, 'a_ext1': 21, 'f_ext1': 12} 

In meinem Setup, muss ich über die Tasten, um Schleife und wenn für jede Schlüssel, der das Suffix '_ext1' hat, möchte ich neu schreiben oder ein neues Wörterbuch erstellen, das einen unveränderten Schlüssel behält (vorzugsweise ohne 'ext1'), aber mit den zusammengeführten Werten.

dh:

newDict = {'a': 121, 'b': 204, 'c': 120, 'd': 1021, 'f_ext1':12} 

Hinweis, der letzte Eintrag im Wörterbuch unverändert sein sollte, da es keine ist 'f'unsuffixed mit '_ext1'

Die Werte selbst nicht ganze Zahlen sein, aber die Operation ist ähnlich.

Hat jemand irgendwelche Ideen?

+0

wie ein:. 121 nur knapp sein Ziel – Deca

+0

'a' erhalten: 100 und 'a_ext1': 21 Ich mag beiden verschmelzen geben ' a ': 121 – domsmiff

+1

durch Zusammenführen von u bedeutet Addition (+)? – Deca

Antwort

1
newDict = {} 
for k in tempDict: 
    if k.endswith("_ext1") and k[:-5] in tempDict: 
     newDict[k[:-5]] = newDict.get(k[:-5],0)+tempDict[k] 
    else: 
     newDict[k] = newDict.get(k,0)+tempDict[k] 
1

Iterieren Sie über die Schlüssel (Elemente) in der sortierten Reihenfolge und Summe oder fügen Sie Werte hinzu. Dies funktioniert, weil Tasten wie "a", "f" Art vor "a_ext1", "f_ext1":

>>> d = {} 
>>> for k, v in sorted(tempDict.items()): 
...  if k[0] in d: 
...   d[k[0]] += v 
...  else: 
...   d[k] = v 
... 
>>> d 
{'a': 121, 'c': 120, 'b': 204, 'd': 1021, 'f_ext1': 12} 
Verwandte Themen