如何编写返回替换了一些元素的字典的表达式



是否可以编写一个简洁的表达式,该表达式的计算结果为现有字典,除非替换(修改,替换(某些元素?例:

a = {'x': 3, 'y': 8}

我想写一个表达式,该表达式的计算结果为"x"元素的值递增 1 的字典:

{'x': 4, 'y': 8}

我不想修改a(如a['x'] += 1(;我想将a视为不可变的。我可以这样做:

a = {'x': 3, 'y': 8}
a_copy = a.copy()
a_copy['x'] += 1

然后引用a_copy 。但是,有没有一种更简洁的方法不需要额外的变量?(我只需要引用一次生成的字典。性能不是问题。

字典

推导可用于生成字典,但我想要一个返回现有字典的轻微变化的表达式。

有点晦涩难懂,但可以完成工作,仅在 Python 3.5 之后有效:

a = {'x': 3, 'y': 8}
a_copy = {**a, 'x': a['x'] + 1}
print(a_copy)
# {'x': 4, 'y': 8}

更好的方法是使用理解:

a_copy = {k: v + 1 if k == 'x' else v for k, v in a.items()}

您可以使用字典理解,仅递增要递增的键的值

#I took the keys in a list if you want to increment more keys
keys_to_incr = ['x']
a = {'x': 3, 'y': 8}
#Increment value if key falls in keys_to_incr, else leave value as0is
a_copy = {k: v+1 if k in keys_to_incr else v for k, v in a.items()}
print(a_copy)

输出将是

{'x': 4, 'y': 8}

最新更新