2011-07-19 1 views

Répondre

6

Non, une fois que update() est appelée, elles ne peuvent pas être distinguées des autres clés.

l'intérieur de la fonction, vous pouvez toujours regarder kw.keys() pour voir ceux qui ont été adoptées dans

par exemple

def func(**kw): 
    d = {'key0' : 0, 'key1' : 1} 
    d.update(**kw) 
    print "updated %s"%kw.keys() 

func(kw0=0, kw1=1) 
+0

Wow, c'était beaucoup plus évident que j'aurais pensé. Merci! – rectangletangle

+0

Mais si vous exécutez 'func (key0 = 0)', alors 'key0' est imprimé malgré le fait que dict 'd' n'a pas été changé. –

2

La seule façon de détecter les clés qui ont été modifiés, est de stocker une copie de l'original dict, puis comparez la version mise à jour et la version originale.

def func(**kw): 
    d = {'key0' : 0, 'key1' : 1} 
    old = dict(d) 
    d.update(kw) 
    changed_keys = [key for key in d if old.get(key) != d.get(key)] 
    print changed_keys 
+0

'set (d.items()). Difference (old.items())' fonctionne également –

+1

Pour être absolument correct, vous utiliseriez 'is not' plutôt que'! = '. Ce seraient ceux qui sont changés. Mais cela pourrait ou ne pourrait pas être ce qui est désiré - l'égalité d'objet pourrait être la seule mesure désirée. –

Questions connexes