Python:使用addition来修改字典值

时间:2011-07-28 00:23:22

标签: python dictionary addition

这是我的第一个编程帖子,也是我的第一个节目,所以请耐心等待。

我有一个像这样初始化的dicionary:

tab = ({'Mike': 0, 'Chad': 15, 'Taylor': 2})

我希望能够为字典中的每个值添加整数 例如,添加5后,字典应如下所示:

tab = ({'Mike':5, 'Chad': 20, 'Taylor': 7})

似乎可以用几行代码来完成,但我无法弄明白。 我试过一个for循环:

for k in tab.itervalues():
    k = k + 5

我运行此代码,然后打印出字典:

tab = ({'Mike': 0, 'Chad': 15, 'Taylor': 2})

字典没有变化。我不确定Python是否将值识别为字符串或整数。我相信你们中的一些人对我的问题及其简单性嗤之以鼻。谢谢你的关注。

2 个答案:

答案 0 :(得分:12)

最简单的方法?

for k in tab.keys():
    tab[k] += 5

答案 1 :(得分:7)

tab.itervalues()在值上创建迭代器。

你迭代这些,并依次交给每个值。值为int s。 在Python中,这些是不可变的

在Python中,语句a += 3大多数个案例中被翻译为a = a + 3a + 3创建 new int对象,对于a已引用int的情况,然后名称a将反弹到新对象。< / p>

所以你改变迭代变量(通过重新绑定),但不改变地图中的值(因为它是不可变的)。

waffle paradox的解决方案通过使用迭代器来访问然后重新绑定dict中的值来解决这个问题。这很简单,Pythonic也很好。

或者,您可以拥抱不变性,并应用函数式编程范例。我们想创建一个类似于我们的字典,但密钥递增;并导致tab引用这个新词典只是偶然的。

因此:

tab = dict((k, v + 5) for (k, v) in tab.iteritems())

当您遇到基于相同基本问题的难题时,这种方法通常会让您的生活更轻松。