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