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

yipeiwu_com5年前Python基础

字典
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读取环境变量的方法和自定义类分享

使用os.environ来读取和修改环境变量: 复制代码 代码如下: import os print (os.environ["TEMP"]) mydir = "c:\\mydir" o...

详解Python odoo中嵌入html简单的分页功能

详解Python odoo中嵌入html简单的分页功能

在odoo中,通过iframe嵌入 html,页面数据则通过controllers获取,使用jinja2模板传值渲染 html页面分页内容,这里写了判断逻辑 <!-- 分页 -...

Python 实现购物商城,含有用户入口和商家入口的示例

这是模拟淘宝的一个简易的购物商城程序。 用户入口具有以下功能: 登录认证 可以锁定用户 密码输入次数大于3次,锁定用户名 连续三次输错用户名退出程序 可以选择直接购买,也可以选择加入购物...

在Django model中设置多个字段联合唯一约束的实例

使用Django中遇到这样一个需求,对一个表的几个字段做 联合唯一索引,例如学生表中 姓名和班级 2个字段在一起表示一个唯一记录。 Django中model部分的写法, 参见 uniqu...

pycharm+django创建一个搜索网页实例代码

pycharm+django创建一个搜索网页实例代码

本文主要研究的是pycharm+django创建一个搜索网页的实例代码,具体步骤和代码示例如下。 创建工程 比如,我创建的工程目录结构如下: 命令行 进入windows命令行,进入根...