Anahtarları iki Python sözlüklerinde bulunan hesaplayın farkı
İki Python sözlükler - dictA
dictB
var sanırım. Eğer dictB
mevcut olan ama herhangi bir anahtar olup olmadığını öğrenmek için dictA
ihtiyacım var. Bu konuda gitmek için en hızlı yolu nedir?
Set halinde sözlük anahtarlarını dönüştürmek gerekiyor gerekiyor mu?
Düşüncelerinizi bilmek...
Cevaplar için teşekkürler.
Benim sorum belirten için özür dilerim düzgün.
Benim senaryo böyle bir sistem dictA
hangi olabilir gibi dictB
ya da bazı tuşları eksik olarak göre dictB
yoksa değeri bazı tuşlar olabilir farklı edilmek zorunda ayarlamak için bu dictA
anahtar değeri.
Sorun sözlüğün standart ve dict in dict olan değerleri alabilir.
Demek
dictA={'key1':a, 'key2':b, 'key3':{'key11':cc, 'key12':dd}, 'key4':{'key111':{....}}}
dictB={'key1':a, 'key2:':newb, 'key3':{'key11':cc, 'key12':newdd, 'key13':ee}.......
'Key2' değeri yeni değere ve 'key13' dict içinde eklenmelidir.olmalı Anahtar değeri sabit bir biçime sahip değil. Basit bir değer veya dict ya da dict bir dict olabilir.
CEVAP
Anahtarları üzerinde küme işlemleri kullanabilirsiniz:
diff = set(dictb.keys()) - set(dicta.keys())
İşte tüm olasılıklar bulmak için bir sınıf:-değeri anahtar çiftleri aynı olan ve-değeri anahtar çiftleri değiştirildi kaldırıldı ne ekledi, ne oldu.
class DictDiffer(object):
"""
Calculate the difference between two dictionaries as:
(1) items added
(2) items removed
(3) keys same in both but changed values
(4) keys same in both and unchanged values
"""
def __init__(self, current_dict, past_dict):
self.current_dict, self.past_dict = current_dict, past_dict
self.set_current, self.set_past = set(current_dict.keys()), set(past_dict.keys())
self.intersect = self.set_current.intersection(self.set_past)
def added(self):
return self.set_current - self.intersect
def removed(self):
return self.set_past - self.intersect
def changed(self):
return set(o for o in self.intersect if self.past_dict[o] != self.current_dict[o])
def unchanged(self):
return set(o for o in self.intersect if self.past_dict[o] == self.current_dict[o])
İşte bazı örnek çıktı:
>>> a = {'a': 1, 'b': 1, 'c': 0}
>>> b = {'a': 1, 'b': 2, 'd': 0}
>>> d = DictDiffer(b, a)
>>> print "Added:", d.added()
Added: set(['d'])
>>> print "Removed:", d.removed()
Removed: set(['c'])
>>> print "Changed:", d.changed()
Changed: set(['b'])
>>> print "Unchanged:", d.unchanged()
Unchanged: set(['a'])
Bir github repo olarak kullanılabilir: https://github.com/hughdbrown/dictdiffer
Nasıl python iki datetime nesneler ara...
Python sözlük, anahtarları ilan olarak...
'json modülü s, dönüştürür sözlük...
Dict anahtarları Python içinde bir özn...
Python, hesaplamak, liste farkı...