除了一些被替换(修改,替换)的元素外,能否写出一个精简的表达式以求出 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 词典的细微变化。
答案 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}