从python 文档中我看到它dict有一个update(...)方法,但它似乎没有异常,我可能不想用新值更新旧字典.例如,当值为None.
这就是我目前所做的事情:
for key in new_dict.keys():
new_value = new_dict.get(key)
if new_value: old_dict[key] = new_value
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来使用新词典更新旧词典.
我知道检查给定字典中是否存在多个键的最佳方法。
if {'foo', 'bar'} <= my_dict.keys():
# True
Run Code Online (Sandbox Code Playgroud)
现在我必须检查给定字典中是否存在任何键并到目前为止:
if any(k in given_keys for k in my_dict):
# True
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以使用子集在第一种情况下检查上面检查的内容。
有没有比计算它们的交集更容易/更快的方法来找出两个字典是否不相交?
对于交叉点,我找到了这个答案,所以不相交测试看起来像这样:
def dicts_disjoint(a, b):
keys_a = set(a.keys())
keys_b = set(b.keys())
intersection = keys_a & keys_b
return not len(intersection)
Run Code Online (Sandbox Code Playgroud)
但是我认为这是低效的,因为它总是计算整个交叉点(没有短路退出)。
有什么更好的想法吗?
我已经很长时间没有学习Python了,而且有点生疏,但对于第一个问题,我正在使用一本字典,需要将它相交以返回键和值。例如,我要输入
a = {1:'a1', 2.5:'a2', 4:'a3'}
b = {1:'a1', 3:'a2', 5:'a4'}
Run Code Online (Sandbox Code Playgroud)
如果我进入c = intersect(a,b),我希望它返回{1:'a1'},但我只能返回{'a1'}。
到目前为止我的代码是:
def intersect(a, b):
for i in a:
if j in b:
if a[i]==b[i]:
return ({i})
else:
return {}
Run Code Online (Sandbox Code Playgroud) dict1 = {
key1: value1,
key2: value2,
key3: value3
}
dict2 = {
key1: value1,
key4: value4,
key3: value2
}
fdict = {}
Run Code Online (Sandbox Code Playgroud)
当我比较上面两个词典时,我想将key1:value1存储到fdict词典中:
我的尝试:
for key in dict1.keys():
if key in dict2.keys():
if dict1[key] == dict2[key]:
fdict[key] == dict1[key]
Run Code Online (Sandbox Code Playgroud)
当我尝试上述方法时,我有"关键错误"..有什么建议吗?
比如说,我们有以下词典:
dict1 = {a:b, b:c}
dict2 = {b:c, c:d}
Run Code Online (Sandbox Code Playgroud)
交叉两个词典的键的最有效方法是什么?
当然,人们可以使用set(dict1.keys()).intersection(set(dict2.keys())),但我认为首先将字典转换为集合并不是很有效.