python基础教程之字典操作详解


Posted in Python onMarch 25, 2014

字典
dictionary

1.键值对的集合(map)

2.字典是以大括号“{}”包围的数据集合

3.字典是无序的,在字典中通过键来访问成员。 可变的,可嵌套,可以原处修改扩展等,不产生新的字典

4.字典的键,可以是字符串(大小写敏感),数字常量或元组(不可变类型),同一个字典的键可以混用类型。字典的键必须是可哈希的

元组作为键的条件是,元组内的值都是不可变类型

a = (1,2)  #可以作为键
b = (1,2,[3,4])  #不可以

5.字典的值可以是任意类型,可以嵌套,可以自由修改

声明
创建字典的几种方式:

1.基本

d = {} #空字典
d = {'name':'tom', 'age':22} 
#等价
d = {}
d['name'] = 'tom'
d['age'] = 22

2.dict

d = dict() #空
d = dict(name='tom', age=22)   
d = dict([('name','tom'), ('age',22)])
#等价
keys = ['name','age']
values = ['tom', 22]
d = dict(zip(keys,values))

3.fromkeys

不指定default_value的话,默认None

>>> dict.fromkeys(['name','age'],'default_value')
{'age': 'default_value', 'name': 'default_value'}

基本操作

0.获取帮助

help(dict)

1.判定键是否存在于字典中
if k in d:   #k not in
    dosomething()

2.读取

d = {'a':1, 'b':2}
print d['a']  #得到1,但是若键不存在,将引发异常KeyError。慎用,建议不使用

print d.get('c', 3) #得到3,get方法,若是键不存在,返回第二个参数default_value.若是没有设default_value返回None
处理missing-key错误三种方式,根据具体需要
if k in d:
    print d[k]
try:
    print d[k]
except KeyError:
    dosomething()
print d.get(k, default)
#等价 d[k] if k in d else default

3.遍历

方式1:

for key in d:
    print key, d[key]
#等价 for key in d.keys()

方式2:

for key,value in d.items():
    print key, value

4.修改方式1:某个键值对

d['key'] = 'newvalue'

方式2:批量添加或更新

#另一个字典
d.update({'key':'newvalue'})  #这里支持一整组值
#元组列表
d.update( [ ('a',1), ('b',2) ] ) #每个元组两个元素,(key,value)
#**key
d.update(c=3, e=4)

5.删除

del d['key']
value = d.pop('key') #删除并返回值
d.clear() #清空
6.其他:
len(d)   #长度
d.keys()  #key列表
d.values()  #value列表
d.items()   #(key, value) 列表
c = d.copy()   #浅拷贝
#返回迭代器,节省内存
d.iterkeys()
d.itervalues()
d.iteritems()
d.setdefault('name', 'ken') #若原来没有,设置,否则原值不变

其他
1.字典排序按照key排序

keys = d.keys()
keys.sort()
for key in keys:
    print d.get(key)

按照value进行排序

sorted(d.items(), lambda x,y: cmp(x[1],y[1]))

另外:
#假设d为字典
sorted(d)  #返回同 sorted(d.keys()),返回的是key排序

2.自定义对象作为key

必须:

def __hash__(self):
    pass
def __eq__(self, other):
    pass

3.字典拷贝浅拷贝:

c = d.copy() #

深拷贝必须用copy模块
form copy import deepcopy
c = deepcopy(d)

4.一种使用场景假设有一个很大的列表l,假设10w条记录

有一个小列表b,要判断b中元素是否在l中

如果:

for i in b:
    if i in l:
        dosomething()

你会发现非常非常慢...因为第二个in语句,会遍历10w条….

改进:

d = dict.fromkeys(l)
for i in b:
    if i in d:
        dosomething()
#空间换时间,O(n) -> O(1)
Python 相关文章推荐
教你安装python Django(图文)
Nov 04 Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
python传递参数方式小结
Apr 17 Python
Python排序搜索基本算法之选择排序实例分析
Dec 09 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 Python
python基础教程之元组操作使用详解
Mar 25 #Python
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 #Python
python使用循环实现批量创建文件夹示例
Mar 25 #Python
python实现图片批量剪切示例
Mar 25 #Python
使用python实现strcmp函数功能示例
Mar 25 #Python
python读写ini文件示例(python读写文件)
Mar 25 #Python
python判断windows隐藏文件的方法
Mar 21 #Python
You might like
thinkphp特殊标签用法概述
2014/11/24 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
理解Javascript_13_执行模型详解
2010/10/20 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
使用Python对Csv文件操作实例代码
2017/05/12 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python 日志增量抓取实现方法
2018/04/28 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
你常见到的runtime exception
2016/09/05 面试题
饭店工作计划书
2014/01/10 职场文书
顶撞领导检讨书
2014/01/29 职场文书
创新型城市实施方案
2014/03/06 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
父亲节感言
2015/08/03 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫