这是我的第一个编程帖子,也是我的第一个节目,所以请耐心等待。
我有一个像这样初始化的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是否将值识别为字符串或整数。我相信你们中的一些人对我的问题及其简单性嗤之以鼻。谢谢你的关注。
答案 0 :(得分:12)
最简单的方法?
for k in tab.keys():
tab[k] += 5
答案 1 :(得分:7)
tab.itervalues()
在值上创建迭代器。
你迭代这些,并依次交给每个值。值为int
s。 在Python中,这些是不可变的。
在Python中,语句a += 3
在大多数个案例中被翻译为a = a + 3
。 a + 3
创建 new int对象,对于a
已引用int的情况,然后名称a
将反弹到新对象。< / p>
所以你改变迭代变量(通过重新绑定),但不改变地图中的值(因为它是不可变的)。
waffle paradox的解决方案通过使用迭代器来访问然后重新绑定dict中的值来解决这个问题。这很简单,Pythonic也很好。
或者,您可以拥抱不变性,并应用函数式编程范例。我们想创建一个类似于我们的字典,但密钥递增;并导致tab
引用这个新词典只是偶然的。
因此:
tab = dict((k, v + 5) for (k, v) in tab.iteritems())
当您遇到基于相同基本问题的难题时,这种方法通常会让您的生活更轻松。