使用dict.values()或dict.itervalues()迭代时修改字典值

2024-05-14 08:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个初始化为这样的diciary:

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

我希望能够将整数添加到字典中的每个值。
例如,在添加5之后,字典应该如下所示:

{'Mike': 5, 'Chad': 20, 'Taylor': 7}

似乎这可以用几行代码来完成,但我想不通。 我试过一个for循环:

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

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

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

这本词典没有改动。我不确定Python是否将这些值识别为字符串或整数。


Tags: 字符串代码infor字典整数tabmike
2条回答

最简单的方法?

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

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

迭代这些值,然后依次传递每个值。这些值是ints.在Python中,它们是不可变的。

在Python中,语句a += 3被翻译成a = a + 3a + 3a已引用int的情况创建一个新的int对象,然后将名称a反弹到新对象。

因此您可以更改迭代变量(通过重新绑定它),但不能更改映射中的值(因为它是不可变的)。

waffle paradox's solution通过使用键上的迭代器访问并重新绑定dict中的值来绕过这个问题。这很简单,也很好。

或者,您可以接受不变性,并应用函数式编程范式。我们希望创建一个与我们拥有的字典类似的字典,但是键是递增的;并且导致tab引用这个新字典只是偶然的。

因此:

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

这种方法通常会让你的生活更容易,当你有一个困难的问题,基于同样的基本问题。

相关问题 更多 >

    热门问题