python学习笔记(四)字典(dict)
2017-07-19 22:58
330 查看
创建 dict
方法 1:创建一个空的 dict,这个空 dict,可以在以后向里面加东西用。
>>> mydict = {} >>> mydict {}
不要小看“空”,“色即是空,空即是色”,在编程中,“空”是很重要。一般带“空”字的人都很有名,比如孙悟空,哦。好像他应该是猴、或者是神。举一个人的名字,带“空”字,你懂得。
创建有内容的 dict。
>>> person = {"name":"qiwsir","site":"qiwsir.github.io","language":"python"} >>> person {'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}
"name":"qiwsir",有一个优雅的名字:键值对。前面的 name 叫做键(key),后面的 qiwsir 是前面的键所对应的值(value)。在一个 dict 中,键是唯一的,不能重复。值则是对应于键,值可以重复。键值之间用(:)英文的分号,每一对键值之间用英文的逗号(,)隔开。
>>> person['name2']="qiwsir" #这是一种向 dict 中增加键值对的方法 >>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'Python', 'site': 'qiwsir.github.io'}
用这样的方法可以向一个 dict 类型的数据中增加“键值对”,也可以说是增加数值。那么,增加了值之后,那个字典还是原来的吗?也就是也要同样探讨一下,字典是否能原地修改?(列表可以,所以列表是可变的;字符串和元组都不行,所以它们是不可变的。)
>>> ad = {} >>> id(ad) 3072770636L >>> ad["name"] = "qiwsir" >>> ad {'name': 'qiwsir'} >>> id(ad) 3072770636L
实验表明,字典可以原地修改,即它是可变的。
方法 2:
利用元组在建构字典,方法如下:
>>> name = (["first","Google"],["second","Yahoo"]) >>> website = dict(name) >>> website {'second': 'Yahoo', 'first': 'Google'}
或者用这样的方法:
>>> ad = dict(name="qiwsir", age=42) >>> ad {'age': 42, 'name': 'qiwsir'}
方法 3:
这个方法,跟上面的不同在于使用 fromkeys
>>> website = {}.fromkeys(("third","forth"),"facebook") >>> website {'forth': 'facebook', 'third': 'facebook'}
需要提醒的是,这种方法是重新建立一个 dict。
需要提醒注意的是,在字典中的“键”,必须是不可变的数据类型;“值”可以是任意数据类型。
>>> dd = {(1,2):1} >>> dd {(1, 2): 1} >>> dd = {[1,2]:1} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
访问 dict 的值
dict 数据类型是以键值对的形式存储数据的,所以,只要知道键,就能得到值。这本质上就是一种映射关系。映射,就好比“物体”和“影子”的关系,“形影相吊”,两者之间是映射关系。此外,映射也是一个严格数学概念:A 是非空集合,A 到 B 的映射是指:A 中每个元素都对应到 B 中的某个元素。
既然是映射,就可以通过字典的“键”找到相应的“值”。
>>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'} >>> person['name'] 'qiwsir' >>> person['language'] 'python'
如同前面所讲,通过“键”能够增加 dict 中的“值”,通过“键”能够改变 dict 中的“值”,通过“键”也能够访问 dict 中的“值”。
本节开头那个城市和区号的关系,也可以用字典来存储和读取。
>>> city_code = {"suzhou":"0512", "tangshan":"0315", "beijing":"011", "shanghai":"012"} >>> print city_code["suzhou"] 0512
既然 dict 是键值对的映射,就不用考虑所谓“排序”问题了,只要通过键就能找到值,至于这个键值对位置在哪里就不用考虑了。比如,刚才建立的 city_code
>>> city_code {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315'}
虽然这里显示的和刚刚赋值的时候顺序有别,但是不影响读取其中的值。
在 list 中,得到值是用索引的方法。那么在字典中有索引吗?当然没有,因为它没有顺序,哪里来的索引呢?所以,在字典中就不要什么索引和切片了。
dict 中的这类以键值对的映射方式存储数据,是一种非常高效的方法,比如要读取值得时候,如果用列表,Python 需要从头开始读,直到找到指定的那个索引值。但是,在 dict 中是通过“键”来得到值。要高效得多。正是这个特点,键值对这样的形式可以用来存储大规模的数据,因为检索快捷。规模越大越明显。所以,mongdb 这种非关系型数据库在大数据方面比较流行了。
基本操作
字典虽然跟列表有很大的区别,但是依然有不少类似的地方。它的基本操作:len(d),返回字典(d)中的键值对的数量
d[key],返回字典(d)中的键(key)的值
d[key]=value,将值(value)赋给字典(d)中的键(key)
del d[key],删除字典(d)的键(key)项(将该键值对删除)
key in d,检查字典(d)中是否含有键为 key 的项
下面依次进行演示。
>>> city_code {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315'}
>>> len(city_code)
4
以 city_code 为操作对象,len(city_code)的值是 4,表明有四组键值对,也可以说是四项。
>>> city_code["nanjing"] = "025" >>> city_code {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315', 'nanjing': '025'}
向其中增加一项
>>> city_code["beijing"] = "010" >>> city_code {'suzhou': '0512', 'beijing': '010', 'shanghai': '012', 'tangshan': '0315', 'nanjing': '025'}
突然发现北京的区号写错了。可以这样修改。这进一步说明字典是可变的。
>>> city_code["shanghai"] '012' >>> del city_code["shanghai"]
通过
city_code["shanghai"]能够查看到该键(key)所对应的值(value),结果发现也错了。干脆删除,用 del,将那一项都删掉。
>>> city_code["shanghai"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'shanghai' >>> "shanghai" in city_code False
因为键是"shanghai"的那个键值对项已经删除了,随意不能找到,用
in来看看,返回的是
False。
>>> city_code {'suzhou': '0512', 'beijing': '010', 'tangshan': '0315', 'nanjing': '025'}
真的删除了哦。没有了。
相关文章推荐
- Python学习笔记:讲两个list合并成字典dict
- Python3学习笔记【基础3--list,tuple,if条件判断,for/while循环,dict字典,set集合】
- Python学习笔记:字典(dict)有关内容
- Python--小甲鱼学习笔记--第26课:字典(dict())
- python 学习笔记——字典(dict)
- Python学习笔记 - 8.字典(Dict)
- Python学习笔记(9)-字典dict
- Python学习笔记(5)--数据结构之字典dict
- Python学习笔记之映射类型字典(dict)
- Python的dict字典结构操作方法学习笔记
- Python学习笔记6-字典Dict
- Python学习笔记(9)-列表list、元组tuple、字典dict、集合set
- Python学习笔记———列表(list)、元组(tuple)、字典(dict)
- 【学习笔记】Python基础-字典Dict和Set和List与Str扩展
- Python学习笔记---元组(tuple)、列表(list)、字典(dict)
- Python学习笔记--表list, 元组tuple, 字典dict
- Python的dict字典结构操作方法学习笔记
- Python的dict字典结构操作方法学习笔记
- Python 2.7学习笔记-字典dict
- 02-python学习笔记:字典dict和集合set