我有这个当前的代码
lst = [1,2,3,4]
c = dict((el,0) for el in lst)
for key in lst:
c[key] += increase_val(key)
有更多的pythonic方式吗?喜欢用地图吗?这段代码字,但我想要一个单行或更好的方式来写这个
答案 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