Python成长之路 — 字典
一、字典的定义与创建
字典是Python中唯一内建的映射类型。你可以将其想象成书本的目录,章节名称代表“key”,页码则代表“value”。书本的目录本质上是也是字典。
1、字典的创建
(1)下面通过一个实例引入字典:
使用列表构建包含姓名和电话号码的数据库
names = ['aa','bb','cc','dd','ee','ff']
numbers = [123,456,789,'',131415,161718]
name = input("please enter your name :")
print(numbers[names.index(name)])
使用字典构建包含姓名和电话号码的数据库
info = {
'aa':123,
'bb':456,
'cc':789,
'dd':"",
'ee':131415,
'ff':161718
}
print(info[input("please enter your name :")])
字典由多个键值对组成,键值对也称为“项”,字典的特性:键是唯一的,值不唯一
(2) 使用dict函数创建字典
items =[('zhangsan',18),('lisi',19),('wangwu',20)]
item = dict(items)
print(item)
2、字典常用基本操作
字典基本操作:len,d[key],d[k]=v,del d[k],k in d
#计算字典键值对数量
test = {
'aa':123,
'bb':456,
'cc':789,
'dd':"",
'ee':131415,
'ff':161718
}
print(len(test))
#d[key],获取指定key的值
print(test['bb'])
#d[k]=v,修改指定key的value
test['ff']=111111111
print(test)
#del d[k] 删除指定键的元素
del(test['ff'])
print(test)
#k in d,查找某个键是否在字典中存在
print('dd' in test)
#简单数据库:每个人的手机号和地址
people={
'zhangsan':{
'phone':13966137218,
'addr':'上海市浦东新区源深路419号国际华城'
},
'lisi':{
'phone':13511983857,
'addr':'上海市松江区人民南路323号'
},
'wanwu':{
'phone':18339484093,
'addr':'上海市宝山区韶山路221号'
}
}
#手机号及地址使用的描述性标签,用于打印输出
labels ={
'phone':'phone number',
'addr':'address'
}
name =input("Your name :")
#查询手机号还是地址
req=input('Phone number please enter \'p\';Address please enter \'a\'')
if req == 'p':
key='phone'
elif req == 'a':
key='addr'
else:
print("Sorry,your enter is wrong")
if name in people: print ("%s 's %s is %s ." % (name,labels[key],people[name][key]))
3、字典基本方法
字典常用方法:clear,copy,fromkeys,get,items,keys,pop,popitem,setdefault,update,values
(1) clear 清空字典
x={}
y=x
x['key']='value'
print(x)
print(y)
x.clear()
print(y)
"""
{'key': 'value'}
{'key': 'value'}
{}
"""
(2) copy
#copy 返回一个具有相同键值对的新字典(浅复制)
a={'a':1,'b':['','','']}
b=a.copy()
#若在副本中修改值,原字典不受影响
b['a']='aaa'
#若在副本中增删值,原字典会跟着改变
b['b'].remove('')
print(a)
print(b)
"""
{'a': 1, 'b': ['2', '3']}
{'a': 'aaa', 'b': ['2', '3']}
"""
#deepcopy 深复制,原字典改变,副本不变;副本改变,原字典也不变;原字典与副本都单独开辟了内存空间
from copy import deepcopy
c={'a':1,'b':['','','']}
d=deepcopy(c)
c["b"].append('')
print(c)
print(d)
print(id(c))
print(id(d))
e=deepcopy(c)
e["b"].append("")
print(c)
print(e)
print(id(c))
print(id(e))
"""
{'a': 1, 'b': ['2', '3', '4', '5555555']}
{'a': 1, 'b': ['2', '3', '4']}
38559608
38597040
{'a': 1, 'b': ['2', '3', '4', '5555555']}
{'a': 1, 'b': ['2', '3', '4', '5555555', '666666666666']}
38559608
38597112
"""
(3) fromkeys
#fromkeys 使用指定的键创建新字典,每个键对应的value默认为None
print({}.fromkeys(['zhangsan','lisi']))
#{'zhangsan': None, 'lisi': None}
#自己提供默认值
print({}.fromkeys(['zhangsan','lisi'],''))
"""
#fromkeys 使用指定的键创建新字典,每个键对应的value默认为None
print({}.fromkeys(['zhangsan','lisi']))
#{'zhangsan': None, 'lisi': None}
#自己提供默认值
print({}.fromkeys(['zhangsan','lisi'],'666'))
"""
(4)get
#get 根据key,获取value。key不存在时,返回None(可自定义默认值替换None)而不会报错b
age ={
'zs':12,
'ls':15,
'ww':18
}
print(age.get('ww'))
print(age.get('zl'))
print(age.get('zl','NA'))
"""
18
None
NA
"""
(5)items
#items 以列表的方式返回字典的所有键值对
pp ={
'zs':12,
'ls':15,
'ww':18
}
print(pp.items())
"""
dict_items([('zs', 12), ('ls', 15), ('ww', 18)])
"""
(6) keys values
#keys 以列表的形式返回字典的所有key;values 返回字典的所有values
print(pp.keys())
print(pp.values())
"""
dict_keys(['zs', 'ls', 'ww'])
dict_values([12, 15, 18])
"""
(7) pop
#pop 弹出(删除)字典中指定key的元素
pp.pop("zs")
print(pp)
pp.pop("ls")
print(pp)
"""
{'ls': 15, 'ww': 18}
{'ww': 18}
"""
(8) popitem
#popitem 随机弹出字典中的某个项
qq ={
'zs': 12,
'ls': 15,
'ww': 18
}
qq.popitem()
print(qq)
"""
{'zs': 12, 'ls': 15}
"""
(9) setdefault
#setdefault 获取字典中某个Key的value,类似于get,若key不存在,则创建指定默认值
print("********************")
t={}
t.setdefault("name","zhangsan")
print(t)
print(t.setdefault("name"))
(10) update
#update 将两个字典合并,如果key相同,则更新原字典
m={
'a':1,
'b':2
}
n={
'c':3,
'd':4
}
m.update(n)
print(m) d={
'tittle':'Python Web Site',
'url':'http://www.python.org',
'changed':'DDD'
}
x={'tittle':'Python Language Website'}
d.update(x)
print(d)
"""
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
{'tittle
问题思考:请详细分析以下很“low”的代码。
x={}
y=x
print(x)
print(y)
x['a']=1
print(x)
print(y)
x={}
print(x)
print(y)
Python成长之路 — 字典的更多相关文章
- 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】
[写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- 【Python成长之路】装逼的一行代码:快速共享文件
[Python成长之路]装逼的一行代码:快速共享文件 2019-10-26 15:30:05 华为云 阅读数 335 文章标签: Python编程编程语言程序员Python开发 更多 分类专栏: 技术 ...
- python成长之路第三篇(1)_初识函数
目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...
- 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)
2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...
- Python成长之路第一篇(3)_初识字典
经过上章的学习我们已经了解到了列表可以通过索引来获取对应的值,在本章我们将学到通过名字来索引数据,这种结构的类型称之为映射(maooing),在Python中字典是唯一内建的映射类型,其中的值我们称之 ...
- Python成长之路第二篇(3)_字典的置函数用法
字典的置函数用法(字典dict字典中的key不可以重复) class dict(object): """ dict() -> new empty dictionar ...
- python成长之路七-函数的进阶
1,python中,名称空间分三种: 全局命名空间 局部命名空间(临时命名空间) 内置名称空间 2,作用域(两种): 1,全局作用域 包含:全局名称空间 内置名称空间 2,局部作用域 包含:局 ...
- python成长之路【第十五篇】:JavaScript初步认识
JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 一.如何编写 1.J ...
随机推荐
- 微信小程序,前端大梦想(四)
微信小程序图片轮播及滚动视图 移动端常用效果图片轮播及数据列表已被小程序封装成了组件,这里和大家分享一下如何使用. Scroll-view 可滚动视图区域 Swiper 图片轮播容器 ...
- 【树莓派】修改树莓派盒子MAC地址
用树莓派盒子,在某些客户方实施过程中,不同客户的网络环境对树莓派盒子的要求不同,网络管理配置要求MAC地址和IP绑定. 一种情况下,查询盒子的MAC地址,添加到网络管理的路由规则中即可: 另一种情况下 ...
- 简单的RTSP消息交互过程
C表示RTSP客户端,S表示RTSP服务端 第一步:查询服务器端可用方法 1. C->S:OPTION request //询问S有哪些方法可用 2. S->C:OPTION ...
- Python-一些实用的函数
一,返回值为bool类型的函数 1.any()函数 any(iterable)->bool 当迭代器中有一个是Ture,则返回Ture:若interable=NUll,则返回False. > ...
- Hibernate启动非常慢问题分析
项目中使用hibernate3,在启动项目过程中,发现加载显示数据很慢,要多几分钟才显示出数据,没有报其他异常.今天特别慢,过了好久都不加载显示数据. 排查思路有以下几个方面: 1.数据库是否开启.检 ...
- Linux下修改环境终端提示符
Linux修改环境变量PS1(命令行提示符),可以使用vi编辑/etc/bashrc或/etc/profile文件,在最后加上: export PS1='[\u@\h \W]\$ ' 即可,其中\u显 ...
- Python13_day3
http://www.cnblogs.com/wupeiqi/articles/4950799.html`` 学习流程 一.基本的学习方法 1,看视频,听懂老师的课程. 2,下课做笔记,将笔记的内容写 ...
- app测试特点
一.安装与卸载1.软件安装后是否可以正常运行:2.安装过程中是否可以中断3.安装空间不足时是否有相应的提示4.是否可以卸载应用(桌面卸载和应用卸载)二.权限测试1.扣费风险:包括发送短信.拨打电话.连 ...
- 通过向日葵(或者TeamViewer)创建VPN
1.向日葵软件的安装比较简单.主要要开启VPN服务. 2.向日葵管理界面,添加机器. 3.组网. 4.作为VPN服务端机器(内网机器)安装传入的连接 5.外网客户端机器 一.登录向日葵客户端 一般使用 ...
- CoreCRM 开发实录 —— 前后端分离的重构
虽然2月初就回来了,可 CoreCRM 一直到5月才开始恢复开发,期间是各种生活中的意外和不方便. 1. 为什么要重构 首先是一件很值得高兴的事情:CoreCRM 有了第一位 contributor! ...