Получение ключей, которые были обновлены с использованием метода обновления словарей - PullRequest
0 голосов
/ 19 июля 2011

Можно ли получить ключи, которые были изменены при использовании метода обновления?

def func(**kw):
    d = {'key0' : 0, 'key1' : 1}
    d.update(**kw)

func(kw0=0, kw1=1)

В приведенном выше коде я хотел бы получить ключи 'kw0' и 'kw1' .

Ответы [ 2 ]

6 голосов
/ 19 июля 2011

Нет, после вызова update() они неотличимы от других клавиш.

Внутри функции вы все равно можете посмотреть на kw.keys(), чтобы увидеть, какие из них были переданы в

например,

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

func(kw0=0, kw1=1)
2 голосов
/ 19 июля 2011

Единственный способ обнаружить ключи, которые были изменены, - это сохранить копию оригинального dict, а затем сравнить обновленную версию и оригинальную версию.

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
...