45

Python字典(dict)设置默认值

 3 years ago
source link: http://www.banbeichadexiaojiubei.com/index.php/2020/10/17/python字典dict设置默认值/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Python中的collections.defaultdict([default_factory[, ]])在设置的字典key第一次出现的时候,自动调用default_factory方法创建一个默认的对象。这个类在实际使用中非常有用,可以帮助我们简化不少问题。

1.合并键值(Key)相同的键值对

如下所示,我们可以把键值(Key)相同的Value合并到一个List中。

from collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

d = defaultdict(list)
for k, v in s:
    d[k].append(v)

s_d = sorted(d.items())

print(s_d)

程序输出:

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

2. 统计字符出现的次数

如下代码所示,当每个字母首次遇到时,defaultdict会查询失败,然后会调用int()来提供一个整数 0 作为默认值,后续再出现的时候就可以通过自增操作实现对字母的计数。

from collections import defaultdict

s = 'mississippi'

d = defaultdict(int)
for k in s:
    d[k] += 1

sorted(d.items())

[('i', 4), ('m', 1), ('p', 2), ('s', 4)]

3. 自定义default_factory

除了Python内置的default factory函数,我们还可以自定义factory函数。

from collections import defaultdict

def constant_factory(value):
    return lambda: value

d = defaultdict(constant_factory('unset'))

d["zhangsan"] = "Beijing"
d["lisi"] = "Nanjing"

for k, v in d.items():
    print(k + " from " + v)
	
print("wangwu from " + d["wangwu"])

程序输出:

lisi from Nanjing
zhangsan from Beijing
wangwu from unset

参考材料

https://docs.python.org/zh-cn/3/library/collections.html#collections.defaultdict


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK