Pythonic在字典中更新值的方法

时间:2017-04-18 06:15:18

标签: python dictionary

我有这个当前的代码

lst = [1,2,3,4]
c = dict((el,0) for el in lst)
for key in lst: 
    c[key] += increase_val(key)

有更多的pythonic方式吗?喜欢用地图吗?这段代码字,但我想要一个单行或更好的方式来写这个

2 个答案:

答案 0 :(得分:4)

在我看来,这是一种非常干净,易读的方式,可以按照你想要的方式更新字典。

但是,如果你正在寻找一个单行,那么就是:

new_dict = {x: y + increase_val(x) for x, y in old_dict.items()}

与此不同的是,这创建了一个新词典,而不是更新原始词典。如果你想改变字典,我认为普通的旧for循环将是最可读的选择。

答案 1 :(得分:1)

在您的情况下,不需要c = dict((el,0) for el in lst)语句,因为我们创建了每个键的值为0的字典。

并且在下一个for循环中,您将增量值添加到0,即0 + 100 = 100,因此也需要添加。

您可以编写如下代码:

lst = [1,2,3,4]
c = {}
for key in lst: 
    c[key] = increase_val(key)

<强> collection.Counter()

使用collections.Counter()删除列表上的一个迭代以创建字典,因为您案例中每个键的默认值都是0

使用收藏集库,import collections

<强>演示:

>>> lst = [1,2,3,4]
>>> data = collections.Counter()
>>> for key in lst:
        data[key] += increase_val(key)

<强> collection.defaultdict()

我们也可以使用collections.defaultdict。只需在上面的代码中使用data = collections.defaultdict(int)即可。默认值为零。

但是如果我们想将默认值设置为100之类的任何常量值,那么我们可以使用lambda函数将默认值设置为100

<强>演示:

>>> data = {}
>>> data["any"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'any'

获取密钥错误,因为字典中有any个密钥。

>>> data1 = collections.defaultdict(lambda:0, data)
>>> data1["any"]
0
>>> data1 = collections.defaultdict(lambda:100, data)
>>> data1["any"]
>>> 100