本文为南大张莉老师《用Python玩转数据》学习笔记

字典可以建立对象之间映射的关系,它是python中唯一内建的映射类型,字典中的每个元素是一个key-value对(键-值对),key可以是数字、字符串、元组等不可变的类型。字典中的值是无序的,仅仅和key有关。

一、创建字典

1.大括号,逗号分隔键值对,key和value之间可以用冒号

>>> a={'Wang':3000,'Liu':10000,'Li':200,'Zhang':4000}

以这种方式创建字典时,可使用fromkeys()函数,将所有的键放在一起,将它们共同的值放在后面,可将所有的值设置为默认值

>>> aDict={}.fromkeys(('Wang','Liu','Li','Zhang'),3000)
>>> aDict
{'Wang': 3000, 'Liu': 3000, 'Li': 3000, 'Zhang': 3000}

2.使用dict函数
example 1:

>>> info=[('Wang',3000),('Liu',10000),('Li',200),('Zhang',4000)]
>>> b=dict(info)

example 2:

>>> info1=[['Wang',3000],['Liu',10000],['Li',200],['Zhang',4000]]
>>> c=dict(info1)

example 3:

>>> d=dict(Wang=3000,Liu=10000,Li=200,Zhang=4000)

example 4:

>>> e=dict((('Lily',200),('Lucy',300)))
>>> e
{'Lily': 200, 'Lucy': 300}

只要元素和元素之间存在对应关系,就可以通过dict()把它们转成相应的key和value生成一个一个映射关系,即键值对。

此外,可通过zip()函数将两个列表的元素打包成一个字典,这在生成字典的过程中常常用到

>>> names=['Wang','Liu','Li','Zhang']
>>> salaries=[3000,10000,200,4000]
>>> dict(zip(names,salaries))
{'Wang': 3000, 'Liu': 10000, 'Li': 200, 'Zhang': 4000}

附:
对字典使用sorted()函数

>>> aDict={'Wang': 3000, 'Liu': 3000, 'Li': 3000, 'Zhang': 3000}
>>> sorted(aDict)
['Li', 'Liu', 'Wang', 'Zhang']

字典时无序存储的,其sorted的结果返回的是一个列表(key的内部存储的顺序),而不是字典

一个小例子:
将公司的简称和股价读出,组成字典:

IF=[('AXP','American Express Company','78.51'),\('BA','The Boeing Company','184.76'),\('CAT','Caterpillar Inc','96.39'),\('CSCO','Cisco System Inc','33.71'),\('CVX','Chevron Corporation','106.09')]
#法一:
aList=[]
bList=[]
for i in range(5):aStr=IF[i][0]bStr=IF[i][2]aList.append(aStr)bList.append(bStr)
aDict=dict(zip(aList,bList))
print(aDict)#法二:
d={} #定义一个空字典
for item in IF:d[item[0]]=item[2]
print(d)

二、字典的操作

1.字典的基本操作
(1)键值查找

>>> a={'Wang':3000,'Liu':10000,'Li':200,'Zhang':4000}
>>> a['Liu']
10000

(2)更新

>>> a={'Wang':3000,'Liu':10000,'Li':200,'Zhang':4000}
>>> a['Liu']=9999
>>> a
{'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000}

(3)添加

>>> a={'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000}
>>> a['Fu']=1000
>>> a
{'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000, 'Fu': 1000}

(4)成员判断

>>> a={'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000, 'Fu': 1000}
>>> 'Hi' in a
False

(5)删除成员

>>> a={'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000, 'Fu': 1000}
>>> del a['Fu']
>>> a
{'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000}

此外,还可通过字典的内建函数和方法来对字典的成员或字典本身进行各类操作.

2.字典常用的内建函数:
(1) dict(),
(2) len() 计算字典元素的个数

>>> a={'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000}
>>> len(a)
4

(3) hash() 判断某一个对象是不是可哈希的(是不是不可变的)
如果是可哈希的,它会出现哈希值
(对列表不可使用hash())

>>> a={'Wang': 3000, 'Liu': 9999, 'Li': 200, 'Zhang': 4000}
>>> hash('Wang')
-6470719400083728228

3.字典常用的方法:
(1) keys()

>>> a={'Wang':3000,'Liu':10000,'Li':200,'Zhang':4000}
>>> a.keys()
dict_keys(['Wang', 'Liu', 'Li', 'Zhang'])

(2) values()

>>> a={'Wang':3000,'Liu':10000,'Li':200,'Zhang':4000}
>>> a.values()
dict_values([3000, 10000, 200, 4000])

(3) items()方法可把字典中每对键和值组成一个元组,然后将其放回一个列表中返回
然后可对每一个键和值进行遍历

>>> a={'Wang':3000,'Liu':10000,'Li':200,'Zhang':4000}
>>> a.items()
dict_items([('Wang', 3000), ('Liu', 10000), ('Li', 200), ('Zhang', 4000)])
>>> for k,v in a.items():print(k,v)Wang 3000
Liu 10000
Li 200
Zhang 4000

(4) update()
快速整合两份信息表(原有信息表和更新信息表)

>>> a={'Wang':3000,'Liu':10000,'Li':200,'Zhang':4000}
>>> b={'Wang':4000,'Liu':90000,'Li':200,'Zhen':4500}
>>> a.update(b)
>>> a
{'Wang': 4000, 'Liu': 90000, 'Li': 200, 'Zhang': 4000, 'Zhen': 4500}

(5) get()
返回指定键的值,如果值不存在,则返回默认值None

>>> stock={'AXP':78.51,'BA':184.76}
>>> stock['AAA']
Traceback (most recent call last):File "<pyshell#46>", line 1, in <module>stock['AAA']
KeyError: 'AAA'
>>> print(stock.get('AAA'))
None

(6) clear()
清空原始对象,并且清空对其进行复制的对象

>>> astock={'AXP':78.51,'BA':184.76}
>>> bstock=astock
>>> astock.clear()
>>> astock
{}
>>> bstock
{}

可对照下面的例子:

>>> astock={'AXP':78.51,'BA':184.76}
>>> bstock=astock #bstock指向和astock同一个对象
>>> astock={} #astock指向另一个对象,和bstock再无联系
>>> bstock
{'AXP': 78.51, 'BA': 184.76}

(7) pop()
弹出指定键的值

>>> stock={'AXP':78.51,'BA':184.76}
>>> stock.pop('AXP')
78.51

此外,字典的常用方法还有copy(),setdefault()

json模块
json格式是网络上非常流行的轻量级的数据交换格式,很多网站都在使用这种格式,其形式大致像这样:
{‘name’: ‘Liu’, ‘address’: {‘city’: ‘Beijing’, ‘street’: ‘Changle Road’}}
json是由一组一组的名称和值对组成,和字典具有相似性,可以像找字典的值一样,把它的值找到。
python中有json模块
json.dumps()可将字典或其他python数据结果转成json编码的字符串,若要还原,使用json.loads()函数即可

>>> import json
>>> json_str=json.dumps(x) #json编码
>>> json_str
'{"name": "Liu", "address": {"city": "Beijing", "street": "Changle Road"}}' #即为json编码的字符串
>>> json.loads(json_str) #还原
{'name': 'Liu', 'address': {'city': 'Beijing', 'street': 'Changle Road'}}

在web应用程序中,常常把很多对象组成一个字典,把它们编码成json格式文件,再把它们放在网络上,可使用json.load()对其进行解码

一个例子:搜索引擎关键字查询
网址中的q,wd是特征词
wd=%s (百度)
q=%us (Bing)
即为我们所要查询的关键词

>>> import requests
>>> keyword={'q':'Python dict'}
>>> r=requests.get('https://cn.bing.com/search',params=keyword)
>>> r.url
'https://cn.bing.com/search?q=Python+dict'
>>> print(r.text)

在Bing浏览器中进行检索,地址栏的网址和代码产生的是一样的

字典充当可变长关键字参数
元组可以充当可变长位置参数),形参用一个星号*表示;而字典充当可变长关键字参数,形参用两个星号表示

>>> def func(args1,*argst,**argsd):print(args1)print(argst)print(argsd)>>> func('hello','Wang','Liu','Li',a1=1,a2=2,a3=3)
hello
('Wang', 'Liu', 'Li')
{'a1': 1, 'a2': 2, 'a3': 3}

Python中字典的基本用法相关推荐

  1. python中字典del的用法_python中字典(Dictionary)用法实例详解

    本文展示了字典在python中的使用.分享给大家参考.具体分析如下: 字典是一种映射结构的数据类型,由无序的"键值对"组成.字典的关键字必须是不可改变的类型,如字符串.数字和元组: ...

  2. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  3. python中字典使用_python中字典的使用

    python中的字典的特性: 在字典中的元素是散列存放的,没有顺序, 在进行增删改查的时候使用字典中需要的关键字(key)即可. 一: 创建字典 1)直接定义一个: dict = {'ob1':'co ...

  4. python中index方法详解_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  5. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  6. python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  7. Python中的解包用法

    Python中的解包用法 解包(unpacking:解包,拆包),基本意思将容器里面的元素逐个取出来使用.封包(packing:封包,打包)基本意思将多个元素合起来作为一个整体使用. 可迭代对象支持解 ...

  8. python中循环语句的用法,python几种循环方式

    python中while循环的用法是什么? python while循环语句:while 判断条件(condition):执行语句(statements)--执行语句可以是单个语句或语句块. 判断条件 ...

  9. python中字典和集合的界定符_python中的字典 和 集合

    python中字典是一种key-value的数据类型 字典的特性: 1.无序的 2.key必须的唯一的,so,字典天生去重 语法: 增加 修改 删除 查找 多级字典嵌套及操作 字典的其他用法 #set ...

最新文章

  1. 标准自编码器(TensorFlow实现)
  2. pyqt5教程13:客户定制组件
  3. graphical model
  4. socket 编程:回射客户/服务程序
  5. 用Spark学习FP Tree算法和PrefixSpan算法
  6. numpy求逆矩阵_线性代数精华2——逆矩阵的推导过程
  7. np.array()和np.mat()区别
  8. 图--广度优先遍历/深度优先遍历(c语言实现)
  9. FISCO BCOS PBFT网络优化
  10. java的启动信息_Java实现软件运行时启动信息窗口的方法
  11. matlab之数据拟合
  12. win7桌面工具无法连接服务器,小编为你讲讲win7系统桌面天气小工具提示无法连接服务的解决方案...
  13. android6.0华为刷机包,华为畅享6官方rom刷机包_华为畅享6原版系统包_升级包
  14. 存档修改 html,制作可以修改.rpgsave存档的网页
  15. ftp服务器怎么删文件夹,删除ftp服务器文件夹
  16. html css依赖管理,composer 管理js css等依赖文件【fxp/composer-asset-plugin】
  17. html5 设计 form,为HTML5表单设计表单模板
  18. 【23种设计模式】中介者模式(Mediator Pattern) .Net Core实现
  19. Redis List命令大全
  20. Python视觉摄像头检测有趣项目之机器学习和概率论重点概念分析重要(三)(重点)

热门文章

  1. 安川服务器显示run电机没电,安川电机驱动器SGM系列使用手册_图文(64页)-原创力文档...
  2. 移动端和PC端响应式布局
  3. 色彩滤镜矩阵(Color Filter Array)
  4. Android 字符串中数字替换为阿拉伯语或波斯语
  5. Baidu 与 Google 的较量
  6. outlook 2007 如何设置开机自动启动
  7. 合成器基础(四) - 其他合成方法
  8. 怎么添加计算机在桌面,怎么在桌面添加我的电脑 - 卡饭网
  9. Kinect Azure DK入门学习(三)——设置人体跟踪SDK + 生成第一个人体跟踪应用程序
  10. 月报 | 2021 年 6 月文章汇总