2011-07-19 54 views

回答

6

不,一旦调用update(),它们就无法与其他键区分开来。

在函数内部,你仍然可以看看kw.keys(),看看哪些在

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

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

哇,这是方式更明显,比我还以为。谢谢! – rectangletangle

+0

但是,如果你运行'func(key0 = 0)',那么尽管事实上这个字典'd'没有被改变,但是'key0'被打印出来了。 –

2

检测已更改密钥的唯一途径获得通过,是存储原件及复印件字典,然后比较更新版本和原始版本。

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())'也可以使用 –

+1

要绝对正确,您可以使用'is not'而不是'!='。那将是那些被改变的。但是,这可能或不可能是所期望的 - 对象平等可能是唯一期望的度量。 –