Python 字典中键映射多个值的问题解决
作者:大梦三千秋
本文主要介绍了在Python中实现一个字典multidict中键可以对应多个值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
问题
如何实现一个字典(multidict)的键对应多个值?
解决方法
字典的定义就是一个键对应一个单值的映射。如果想要一个键映射多个值,那么需要将多个值放到其他容器中,例如列表和集合当中,示例代码如下:
a = { 'x': [1,2,3], 'y': [4,5] } b = { 'x': {1,2,3}, 'y': {4,5} }
而选择使用列表还是集合取决于实际的需求。如果需要保持插入元素的顺序,建议选择列表;如果需求需要去掉重复的元素,建议选择集合。
Python 提供的 collections
模块中,defaultdict
可以实现构造这样的字典。defaultdict
有个特征是能够自动初始化每个 key
刚开始对应的值,所以只需要进行添加元素的操作。示例如下:
from collections import defaultdict dl = defaultdict(list) dl['x'].append(1) dl['x'].append(2) dl['y'].append(3) ds = defaultdict(set) ds['x'].add(1) ds['x'].add(2) ds['y'].add(3) print(dl) print(ds)
这里需要注意的是,defaultdict
会自动为将要访问的键(即使目前字典中不存在这个键)创建映射实体。所以如果不需要这种特性,可以在普通字典中使用 setdefault()
方法代替。示例如下:
d = {} d.setdefault('x', []).append(1) d.setdefault('x', []).append(2) d.setdefault('y', []).append(3)
但这种方法被认为过于繁琐,因为每次调用都要创建新的初始值示例,例如上面代码中的空列表([]
)
代码解析
上面提及的映射多值的字典,实际上也能够自己实现,但是对于值的初始化会比较麻烦,示例如下:
d = {} for key, value in items: if key not in d: d[key] = [] d[key].append(value)
而使用 defaultdict
则会更加简洁:
d = defaultdict(list) for key, value in items: d[key].append(value)
到此这篇关于Python 字典中键映射多个值的问题解决的文章就介绍到这了,更多相关Python 字典键映射值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!