我需要将值从一个字典(N)附加到另一个字典(M) - 下面的伪代码
if[x] in M:
M[x]=M[x]+N[x]
else:
M[x]=N[x]
为N中的每个键执行此操作似乎是非常不整齐的编码 实现这一目标的最有效方法是什么?
答案 0 :(得分:3)
当然你应该在“x”中迭代你的键 - 但是单行解决方案是:
<div>textbox1</div>
<div>textbox2</div>
<div>textbox3</div>
<div>textbox4</div>
<div>textbox5</div>
<div>textbox6</div>
<div>textbox7</div>
<div>textbox8</div>
答案 1 :(得分:1)
不完全确定您的x
是什么(猜测M
和N
的键),然后这可能会有效:
M = {key: M.get(key, 0) + N.get(key, 0) for key in set((*M, *N))}
示例:
M = {'a': 1, 'c': 3, 'e': 5}
N = {'a': 2, 'b': 4, 'c': 6, 'd': 8}
你得到:
print(M) # {'a': 3, 'e': 5, 'd': 8, 'c': 9, 'b': 4}
或者请说明给定示例的期望输出是什么。
答案 2 :(得分:1)
当你说“追加”时,我认为这意味着你的dicts中的值是列表。但是,如果它们是简单的对象,如整数或字符串,则可以很容易地调整下面的技术。
Python没有提供任何用于处理列表序列的内置方法,大多数有效的方法取决于数据,因为某些方法在高比例时效果最好共享密钥,当共享密钥不多时,其他方式会更好。
如果共享密钥的比例不是太高,则此代码效率相当高:
m = {1:[1, 2], 2:[3]}
n = {1:[4], 3:[5]}
for k, v in n.items():
m.setdefault(k, []).extend(v)
print(m)
<强>输出强>
{1: [1, 2, 4], 2: [3], 3: [5]}
通过缓存.setdefault
方法和空列表,您可以稍快一些:
def merge(m, n):
setdef = m.setdefault
empty = []
for k, v in n.items():
setdef(k, empty).extend(v)
如果你期望共享密钥的比例很高,那么最好对密钥执行set操作(在Python 3中,dict.keys()返回一个类似set的对象,这对构造非常有效),以及与N的唯一键分开处理共享密钥。