如何在删除每个字典的子集时合并字典对
Posted
技术标签:
【中文标题】如何在删除每个字典的子集时合并字典对【英文标题】:How to merge pairs of dictionaries while dropping a subset of each dictionary 【发布时间】:2017-06-23 20:16:44 【问题描述】:问题陈述:
我正在使用 python 3.5 并且喜欢新的字典合并语法:
merged = **A, **B
但是,如果您只想要 A
和 B
中的某个键子集怎么办?
A_keys = [some small subset of the keys from A]
B_keys = [some small subset of the keys from B]
merged = ???
【问题讨论】:
没有速记。 @Prune 问题没有问题 我会选择两个简单的循环:merged =
for k in A_keys: merged[k] = A[k]
,B
也一样。
【参考方案1】:
您可以将新符号与the answer 结合起来解决有关如何从字典中选择某些键的问题:
merged = ** k:A[k] for k in A.keys() & A_keys , ** k:B[k] for k in B.keys() & B_keys
即使 A_keys 或 B_keys 中的某些值不是 A 或 B 中的真正键,这也有效。
【讨论】:
【参考方案2】:解救字典:
A = 'one': '1', 'two': '2', 'three': '3'
B = 'four': '4', 'five': '5', 'six': '6'
A_keys = ['one', 'two']
B_keys = ['five']
merged = **k:v for k,v in A.items() if k in A_keys, **k:v for k,v in B.items() if k in B_keys
【讨论】:
这绝对解决了问题,但不太优雅(我认为实际上是三个 dict 理解)。我等着看有没有python高手有什么袖手旁观的,否则我会接受这个。 好吧,你可以只用两个推导式来做到这一点,但你不会使用闪亮的新合并语法,它也不会那么富有表现力:merged = k:v for k,v in A.items() if k in A_keys; merged.update(k:v for k,v in B.items() if k in B_keys)
【参考方案3】:
您可以通过调用要从两个集合中合并的特定键来访问。
dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3
dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5
合并所需的键
print (dict1['bookA'] + dict2['bookB'])
结果:
'bookE': 5, 'bookD': 4, 'bookB': 2, 'bookA': 1, 'bookC': 3
或者您可以将结果存储到新字典中。
y = dict1['bookA'] + dict2['bookB']
print (y)
【讨论】:
谁对我的回答给出了负面反馈,有什么问题? 几乎所有东西,恐怕。dict1['bookA'] + dict2['bookB']
抛出异常。即使它有效,结果也不会是字典。以上是关于如何在删除每个字典的子集时合并字典对的主要内容,如果未能解决你的问题,请参考以下文章
python - 如何在更改python中的值时合并一个嵌套字典和一个简单字典?