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

时间:2019-06-07 19:45:05

标签: python

除了一些被替换(修改,替换)的元素外,能否写出一个精简的表达式以求出 existing 词典的含义? 示例:

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

我想编写一个表达式,该表达式的dict的'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。但是,是否有更简洁的方法不需要其他变量? (我只需要引用生成的字典一次。)性能不是问题。

Dictionary comprehensions可用于生成 new 词典,但是我想要一个表达式,该表达式返回 existing 词典的细微变化。

2 个答案:

答案 0 :(得分:2)

有点晦涩难懂,但确实可以解决问题,仅自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()}

答案 1 :(得分:1)

您可以使用字典理解,只为要增加的键增加值

#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}