Seite 1 von 1

Mehrere Dicts: Gucken ob alle bis auf einen Wert gleich?

Verfasst: Montag 12. Juli 2010, 17:24
von Liffi
Ich hab ein paar Dictionarys, die eine beliebige Anzahl an Eintraegen haben koennen.
Sie teilen sich jedoch alle Keys.
Mein Ziel ist es zu ermitteln ob zwei Dicts aus der Menge alle bis auf einen Wert gemeinsam haben.
Beispiel:

Code: Alles auswählen

dict1 = {'y': Decimal('10'), 'x': Decimal('10'), 'z': Decimal('1')}
dict2 = {'y': Decimal('1'), 'x': Decimal('10'), 'z': Decimal('1')}
dict3 = {'y': Decimal('1'), 'x': Decimal('1'), 'z': Decimal('1')}
Der Unterschied von dict1 zu dict2 waere dann beim key 'y'.
Der Unterschied von dict1 zu dict3 waere aber dann zu gross (da zwei Werte unterschiedlich sind).

Bei zwei Dicts ginge ja folgendes:

Code: Alles auswählen

ungleich = None
for key in dict1:
    if not dict1[key] == dict2[key]:
        if ungleich is None:
            ungleich = key
        else:
            ungleich = None
            break
Wie erweitere ich das am geschicktesten auf alle dicts?
Alle in eine Liste packen und dann auch darueber iterieren?

Re: Mehrere Dicts: Gucken ob alle bis auf einen Wert gleich?

Verfasst: Montag 12. Juli 2010, 17:57
von jbs

Code: Alles auswählen

from decimal import Decimal
dict1 = {'y': Decimal('10'), 'x': Decimal('10'), 'z': Decimal('1')}
dict2 = {'y': Decimal('1'), 'x': Decimal('10'), 'z': Decimal('1')}
dict3 = {'y': Decimal('1'), 'x': Decimal('1'), 'z': Decimal('1')}

def compare(a, b):
    return [k for k in a if a[k]!=b[k]]

print compare(dict1, dict2)
print compare(dict2, dict3)
print compare(dict1, dict3)

Re: Mehrere Dicts: Gucken ob alle bis auf einen Wert gleich?

Verfasst: Montag 12. Juli 2010, 18:21
von Liffi
jbs hat geschrieben:

Code: Alles auswählen

def compare(a, b):
    return [k for k in a if a[k]!=b[k]]
Danke.
Ich denke, diese Methode werde ich noch oefter brauchen koennen.