我经常发现自己使用这个结构:
dict1['key1'] = dict2['key1']
dict1['key2'] = dict2['key2']
dict1['key3'] = dict2['key3']
使用dict1
的子集更新dict2
。
我认为没有一种构建方法可以在表单中执行相同的操作
dict1.update_partial(dict2, ('key1', 'key2', 'key3'))
你通常采取什么方法?你有没有让自己的功能?看起来怎么样?
评论
我已经向python-ideas提交了idea:
有时你想要一个dict,它是另一个dict的子集。如果,这会很好 dict.items接受了一个可选的返回键列表。如果没有钥匙 给定 - 使用默认行为 - 获取所有项目。
class NewDict(dict):
def items(self, keys=()):
"""Another version of dict.items() which accepts specific keys to use."""
for key in keys or self.keys():
yield key, self[key]
a = NewDict({
1: 'one',
2: 'two',
3: 'three',
4: 'four',
5: 'five'
})
print(dict(a.items()))
print(dict(a.items((1, 3, 5))))
vic@ubuntu:~/Desktop$ python test.py
{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}
{1: 'one', 3: 'three', 5: 'five'}
因此,要使用另一个dict的一部分更新dict,您可以使用:
dict1.update(dict2.items(['key1', 'key2', 'key3']))
答案 0 :(得分:9)
你可以这样做:
keys = ['key1', 'key2', 'key3']
dict1.update((k, dict2[k]) for k in keys)
答案 1 :(得分:6)
我知道没有内置功能,但这只是一个简单的2线程:
for key in ('key1', 'key2', 'key3'):
dict1 = dict2[key]
答案 2 :(得分:0)
dict1.update([(key, dict2[key]) for key in dict2.keys()])
答案 3 :(得分:0)
如果我们假设dict1中所有也在dict2中的键都应该更新,那么最明确的方法可能是过滤dict2并使用过滤后的dict1更新dict1:
dict1.update(
{k: v for k, v in dict2.items() if k in dict1})