【Python】利用setdefault函数实现dict的转置(key与value对互换),统计value出现的次数
2015-12-13 17:25
676 查看
所谓dict的转置也就是key与value对的互换。这里唯一的问题是,Python要求dict中一个key仅能对应一个value而不能对应多个。
因此,如果对于dic = {"a":2, "b":1, "c":2, "d":2, "e":1};这样一个dict,单纯地交互key与value的位置,
# -*-coding:utf-8-*-
dic = {"a":2, "b":1, "c":2, "d":2, "e":1};
dic_T1 = dict((v, k) for k, v in dic.items());
print dic_T1;
将会出现如下部分value消失的情况,因为前面存在key对应的value被后面的value所覆盖了。
因此,我们要定义一个数组去存放各个key所对应的value,具体代码如下:
# -*-coding:utf-8-*-
dic = {"a":2, "b":1, "c":2, "d":2, "e":1};
dic_T = {};
for k, v in dic.items():
dic_T.setdefault(v, []).append(k);
print dic_T;
运行结果如下:
这里用到一个dict自带的setdefault函数,有了这个函数,就不用判断这个名为dic_T新的dict中,某个key值是否已经初始化list,如果不初始化list,单纯append,必然会出现异常,因为list根本不存在。
dict自带的setdefault函数是这样的意思:如果Dict.setdefault(key,value),相当于如果Dict中这个key存在,则等价Dict[key]取出D中k所对应的值value,如果Dict中这个key不存在,则设置Dict[Key]=value。这样的话,在构造这个dic_T,可以省掉一个has_key的判断了,很省事。
上述,就完成一个利用setdefault函数实现dict的转置(key与value对互换)的过程,
当然,这个过程是不可逆的,因为得出来dict的value是一个list,你无法用list作为dict的key,python是这样规定的。
我们可以据此,进一步统计dic中某一value出现的次数。此时利用到上述错误转置方法的循环构造dict的方法,在dic_T的基础上,构造一个key就是原来的key,value则是对应list长度的数组。代码如下:
# -*-coding:utf-8-*-
dic = {"a":2, "b":1, "c":2, "d":2, "e":1};
dic_T = {};
for k, v in dic.items():
dic_T.setdefault(v, []).append(k);
dic_T = dict((k, len(v)) for k, v in dic_T.items());
print dic_T;
运行结果:
因此,如果对于dic = {"a":2, "b":1, "c":2, "d":2, "e":1};这样一个dict,单纯地交互key与value的位置,
# -*-coding:utf-8-*-
dic = {"a":2, "b":1, "c":2, "d":2, "e":1};
dic_T1 = dict((v, k) for k, v in dic.items());
print dic_T1;
将会出现如下部分value消失的情况,因为前面存在key对应的value被后面的value所覆盖了。
因此,我们要定义一个数组去存放各个key所对应的value,具体代码如下:
# -*-coding:utf-8-*-
dic = {"a":2, "b":1, "c":2, "d":2, "e":1};
dic_T = {};
for k, v in dic.items():
dic_T.setdefault(v, []).append(k);
print dic_T;
运行结果如下:
这里用到一个dict自带的setdefault函数,有了这个函数,就不用判断这个名为dic_T新的dict中,某个key值是否已经初始化list,如果不初始化list,单纯append,必然会出现异常,因为list根本不存在。
dict自带的setdefault函数是这样的意思:如果Dict.setdefault(key,value),相当于如果Dict中这个key存在,则等价Dict[key]取出D中k所对应的值value,如果Dict中这个key不存在,则设置Dict[Key]=value。这样的话,在构造这个dic_T,可以省掉一个has_key的判断了,很省事。
上述,就完成一个利用setdefault函数实现dict的转置(key与value对互换)的过程,
当然,这个过程是不可逆的,因为得出来dict的value是一个list,你无法用list作为dict的key,python是这样规定的。
我们可以据此,进一步统计dic中某一value出现的次数。此时利用到上述错误转置方法的循环构造dict的方法,在dic_T的基础上,构造一个key就是原来的key,value则是对应list长度的数组。代码如下:
# -*-coding:utf-8-*-
dic = {"a":2, "b":1, "c":2, "d":2, "e":1};
dic_T = {};
for k, v in dic.items():
dic_T.setdefault(v, []).append(k);
dic_T = dict((k, len(v)) for k, v in dic_T.items());
print dic_T;
运行结果:
相关文章推荐
- NAO机器人之开发环境搭建
- 我的python笔记
- 怎样使用 Python 来判断一个路径是否存在判断一个路径是文件还是目录
- 【Python】无须numpy,利用map函数与zip(*)函数对数组转置
- Python 装饰器学习心得
- python3.5读取网页代码,并保存
- 04 Python正则表达式 爬虫程序 变量的引用,浅拷贝,深拷贝 多线程 进程锁 数据库模块
- Python3切换华为hi link设备数据开关
- 分享Python字符串关键点
- python 多线程学习
- 03 Python 文件系统 访问权限 函数 类与面向对象 自定义模块
- Python实时获取cmd的输出
- [从头学python] 第03节 让我们来学习math
- python中的算术操作符
- 【Python】Mysql中文乱码问题与MySQLdb对Mysql操作类的改进
- python 安装selenium环境
- python异常记录
- 02 Python元组 字典 数据类型 if while for 迭代
- kmeans聚类的简介和代码(python)
- 01 Python 安装 切片 查找替换 print 函数 return 局域代码块 注释 帮助 强制转换