1、字典解释

映射:通过名字来引用值得数据结构,字典是python中唯一内建的映射类型,字典中的值并没有特殊的顺序,都存储在一个特定的键下,键可以使数字、字符串、元组,通过查找某个特定键,就可以找到对应的值
(1)使用列表实现电话薄查找:

>>> name = ['zyj','sl','xm']
>>> numbers = ['123','456','789']
>>> numbers = [123,456,0789]#注:数字之前加0会出现语法报错。以0开头的数字应该表示为数字字符串,而不是整数(python3中使用0o开头表示8进制,python2中在数字前面加0表示8进制,因此会出错)
SyntaxError: invalid token
>>> print(numbers[name.index('sl')]) 456
>>>

(2)使用字典实现:键值对和大括号组成,键值之间使用冒号,项之间使用逗号。键时唯一的,值并不唯一

>>> phonebook = {'zyj':123,'sl':456,'xm':789}
>>> print(phonebook['sl'])
456
>>>

2、字典创建

dict:字典函数,通过其他映射或者键值对的序列建立字典

>>> items = [('name','zyj'),('sex','male')]
>>> d = dict(items)
>>> print(d)
{'sex': 'male', 'name': 'zyj'}
>>> print(d['sex'])
male
>>>

通过关键字参数创建字典

>>> d = dict(name ='zyj',sex='male')
>>> print(d)
{'sex': 'male', 'name': 'zyj'}
>>>

创建空字典

>>> d = dict()
>>> print(d)
{}
>>>

3、基本字典操作

(1)len(d) 返回d中项(键值对)的数量

>>> d = dict(name1 = 'zyj',score1 = 90,name2 = 'sl',score2 = '60')
>>> print(d)
{'name2': 'sl', 'name1': 'zyj', 'score1': 90, 'score2': '60'}
>>> print(len(d))
4
>>>

(2)d[k] 返回关联到键k上的值

>>> print(d['score1'])
90
>>>

(3)d[k] = v 将值v关联到键k上

>>> d = dict(name = '')
>>> d['name'] = 'zyj'
>>> print(d)
{'name': 'zyj'}
>>>

(4)del d[k] 删除键为k的值

>>> del d['name']
>>> print(d)
{}
>>>

(5)k in d 检查d中是否含有键位k的项

>>> print('name' in d)
False
>>> d = dict(name= 'zyj')
>>> print('name' in d)
True
>>>

4、字典特性

1、键类型:任意不可变类型,如数字、字符串、元祖
2、自动添加:通过给键赋值,字典可以创建新的项。不能将值关联到列表范围之外的索引上。
3、成员资格:k in d 查找的是键,而不是值。而V in list用来查找值。

>>> x = []
>>> x[42] = 'zyj'
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
x[42] = 'zyj'
IndexError: list assignment index out of range
>>> print(x)
[]
>>> x = {}
>>> x[42] = 'zyj'
>>> print(x)
{42: 'zyj'}
>>> x = [None]*43
>>> x[42] = 'zyj'
>>> print(x)
[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'zyj']
>>>

键可以为元组

>>> dict1 = {}
>>> dict1[(1,2),(3,4)] = 105
>>> print(dict1)
{((1, 2), (3, 4)): 105}
>>>

5、字典的格式化字符串

在%后面加上键(用原括号括起来),后面跟上其他说明元素。

>>> phonebook = {'zyj':123,'sl':456,'lm':789}
>>> print('zyj\'s phone number is %(zyj)s.' % phonebook)
zyj's phone number is 123.
>>> score = dict(chinese=100,english=99,math=89)
>>> print('zyj\'s score is 语文:%(chinese)s 英语:%(english)s 数学:%(math)s' % score)
zyj's score is 语文:100 英语:99 数学:89
>>>

6、字典示例

编写一个简单的数据库,实现查找一个人的电话或者地址:

people = {
'zyj' : {
'phone':'123',
'addr':'45'
},
'sl' : {
'phone':'456',
'addr':'56'
},
'xm' : {
'phone':'789',
'addr':'78'
}
}
lables = {
'phone' : 'phone number',
'addr' : 'address'
}
name = input('name: ')
requset = input('p or a:')
if requset == 'p':
key = 'phone'
if requset == 'a':
key = 'addr'
if name in people:
print("%s's %s is %s" % (name,lables[key],people[name][key])) >>>
name: zyj
p or a:p
zyj's phone number is 123
>>>

7、字典方法

clear方法清除字典中所有的项,原地操作,返回值为None。

>>> d = dict(name='zyj',age='20')
>>> print(d)
{'name': 'zyj', 'age': '20'}
>>> d1 = d
>>> print(d1)
{'name': 'zyj', 'age': '20'}
>>> print(id(d1))
44760960
>>> print(id(d))
44760960
>>> d1['name'] = 'admin'
>>> print(d1)
{'name': 'admin', 'age': '20'}
>>> print(d)
{'name': 'admin', 'age': '20'}
>>> d1 = d.clear()
>>> print(d,d1)
{} None

copy方法返回一个具有相同键值对的新字典,浅复制。
浅复制:值本身相同,不会产生副本。当替换时,原始字典不受影响,但是当修改了某个值(原地修改而不是替换),原始字典会发生改变
深复制:生成副本,使用copy模块中的deepcopy函数完成操作。

>>> x = {'username':'zyj','permition':['r','w']}
>>> y = x.copy()
>>> y['username'] = 'admin'
>>> y['permition'].remove('w')
>>> print(y)
{'permition': ['r'], 'username': 'admin'}
>>> print(x)
{'permition': ['r'], 'username': 'zyj'}
>>> from copy import deepcopy
>>> d = {'user':'zyj','permition':['r','w']}
>>> d1 = d.copy()
>>> d2 = deepcopy(d)
>>> print(id(d1),id(d2))
44793568 44793088
>>> d1['permition'].append('o')
>>> print(id(d1),id(d2))
44793568 44793088
>>>

fromkeys方法使用给定的键建立新的字典,每个键都对应一个默认的值None

>>> d = dict()
>>> d1 = d.fromkeys(['name','permition'])
>>> print(d1)
{'permition': None, 'name': None}
>>> print(dict.fromkeys(['name','permition']))
{'permition': None, 'name': None}
>>>

若不想使用None为默认值,可以通过参数的方式提供默认值

>>> print(dict.fromkeys(['name','permition'],'(zyj)'))
{'permition': '(zyj)', 'name': '(zyj)'}
>>> print(dict.fromkeys(['name','permition'],'zyj'))
{'permition': 'zyj', 'name': 'zyj'}
>>>

get方法是个更宽松的访问字典项的方法。当访问的字典项不存在时不会报错,返回None,可以自定义默认值来替换None,使用get方法提供默认值,可以使得程序在接收到非期望值时做出合理的处理。

>>> d = dict()
>>> print(d.get('name'))
None
>>> print(d.get('name','N/A'))
N/A
>>> d['name'] = 'zyj'
>>> print(d.get('name'))
zyj
>>>

has_key方法可以检查字典中是否含有特定的键。相当于 k in d,python3.0中不包含此函数。

>>> d = {}
>>> print(d.has_key('name'))
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
print(d.has_key('name'))
AttributeError: 'dict' object has no attribute 'has_key'
>>> print('name' in d)
False

items方法将字典所有的项以列表方式返回,(键,值)对的形式表示,另外返回时没有遵循特定的次序,在python3中取代iteritems。即返回一个迭代器而非列表,iteritems方法与items作用大致相同,但是会返回一个迭代器对象而不是列表。在python3中没有此方法,使用items代替。

>>> d = {'name':'zyj','permition':['r','w']}
>>> d1 = d.items()
>>> print(d1)
dict_items([('permition', ['r', 'w']), ('name', 'zyj')])
>>> print(list(d1))
[('permition', ['r', 'w']), ('name', 'zyj')]
>>> d = {'name':'zyj','permition':['r','w']}
>>> d1 = d.iteritems()
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
d1 = d.iteritems()
AttributeError: 'dict' object has no attribute 'iteritems'
>>> print(d1)
dict_items([('permition', ['r', 'w']), ('name', 'zyj')])
>>> print(list(d1))
[('permition', ['r', 'w']), ('name', 'zyj')]
>>>

keys方法将字典中的键以列表的形式返回,而iterkeys则返回针对键的迭代器.同样在python3中使用keys代替iterkeys。

>>> d = {'name':'zyj','permition':['r','w']}
>>> d1 = d.keys()
>>> print(d1)
dict_keys(['permition', 'name'])
>>> print(list(d1))
['permition', 'name']
>>>

values和itervalues 以列表的形式返回字典中的值,(返回值的迭代器),python3中使用values代替itervalues

>>>
>>> d = {'name':'zyj','permition':['r','w']}
>>> print(d.values())
dict_values([['r', 'w'], 'zyj'])
>>> print(list(d.values()))
[['r', 'w'], 'zyj']
>>>

pop方法用于获得给定键的值,并将这个键值对从字典中移除.pop返回的是给定键的值,同时将原字典中给定的键值对移除。

>>> d = {'name':'zyj','permition':['r','w']}
>>> print(d.pop('permition'))
['r', 'w']
>>> print(d)
{'name': 'zyj'}
>>

popitem方法类似与list.pop。区别是popitem弹出的是随机的项,因为字典中没有’最后的元素‘此方法可以一个接一个地移除并处理项,由于字典的无序性,因此字典没有类似append等价的方法。

>>> d = {'name':'zyj','permition':['r','w']}
>>> print(d.popitem())
('permition', ['r', 'w'])
>>>

setdefault方法类似与get,能够获取与给定键相关的值,同时setdefault可以在字典中不含有给定项的情况下设定相应的默认值;

当键不存在时,setdefault返回默认值并且更新字典。如果键存在,就返回与其对应的值

>>> d = {'name':'zyj','permition':['r','w']}
>>> print(d.setdefault('score','N/A')) #将('score':'N/A')更新到字典中
N/A
>>> print(d.setdefault('name','N/A'))
zyj
>>> print(d)
{'permition': ['r', 'w'], 'score': 'N/A', 'name': 'zyj'}
>>>

update方法可以利用一个字典项更新另外一个字典,提供字典中的项会添加到旧字典中,若有相同键将会进行覆盖

>>>
>>> d = {'name':'zyj','permition':['r','w']}
>>> d1 = {'name':'admin'}
>>> d.update(d1)
>>> print(d)
{'permition': ['r', 'w'], 'name': 'admin'}
>>> d = {'name':'zyj','permition':['r','w']}
>>> d1 = {'score':'90'}
>>> d.update(d1)
>>> print(d)
{'permition': ['r', 'w'], 'score': '90', 'name': 'zyj'}
>>>

python字典的更多相关文章

  1. Python字典和集合

    Python字典操作与遍历: 1.http://www.cnblogs.com/rubylouvre/archive/2011/06/19/2084739.html 2.http://5iqiong. ...

  2. python 字典排序 关于sort()、reversed()、sorted()

    一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...

  3. python字典中的元素类型

    python字典默认的是string item={"browser " : 'webdriver.irefox()', 'url' : 'http://xxx.com'} 如果这样 ...

  4. python字典copy()方法

    python 字典的copy()方法表面看就是深copy啊,明显独立 d = {'a':1, 'b':2} c = d.copy() print('d=%s c=%s' % (d, c)) Code1 ...

  5. python 字典实现类似c的switch case

    #python 字典实现类似c的switch def print_hi(): print('hi') def print_hello(): print('hello') def print_goodb ...

  6. python字典的常用操作方法

    Python字典是另一种可变容器模型(无序),且可存储任意类型对象,如字符串.数字.元组等其他容器模型.本文章主要介绍Python中字典(Dict)的详解操作方法,包含创建.访问.删除.其它操作等,需 ...

  7. Python 字典(Dictionary)操作详解

    Python 字典(Dictionary)的详细操作方法. Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字 ...

  8. Python 字典(Dictionary) get()方法

    描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...

  9. Python 字典(Dictionary) setdefault()方法

    描述 Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值. 语法 setdefault()方法语法: ...

  10. python 字典内置方法get应用

    python字典内置方法get应用,如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这 ...

随机推荐

  1. Java多线程编程核心技术---学习分享

    继承Thread类实现多线程 public class MyThread extends Thread { @Override public void run() { super.run(); Sys ...

  2. Npoi导入导出Excel操作

    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...

  3. zendstudio快捷键收录

    360截屏快捷键:ctrl+shift+x zendstudio:注释代码:ctrl+shift+/ 删除光标所在行:ctrl+D 复制当前行:ctrl+alt+↓ 上下行互换:alt+↑/↓ 代码格 ...

  4. Shader 学习笔记

    Shader "Custom/Diffuse Texture" { // Shader的开始,双引号内饰该Shader的名字 Properties { _MainTex (&quo ...

  5. 在GridView隐藏字段

    在GridView中隐藏一字段,方便这条记录的处理,同时隐藏一个Button实现点击这条记录时的处理 1.绑定 <asp:TemplateField>                    ...

  6. 【bzoj4326】[NOIP2015]运输计划

    题目描述 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该 ...

  7. 【荐】PHP采集工具curl快速入门教程

    为什么要用CURL? CURL(Client URL Library Functions)是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTT ...

  8. 【Alpha版本】冲刺-Day10

    队伍:606notconnected 会议时间:11月18日 会议总结 张斯巍(433) 今天安排:完成剩余界面的设计,小修小补 完成度:100% 遇到的问题:无 感想:因为自己是负责界面美工部分的, ...

  9. 局域网中共享Lantern上网

    Lantern作为一款非常好用的上网软件,深受大家喜爱,但是由于目前没有ios版,所以iPhone用户上网很麻烦,这里介绍一下如何共享Lantern使局域网内的设备都能正常上网. 1.电脑端设置:右键 ...

  10. java高cup占用解决方案

    项目中发现java cpu占用高达百分之四百,查看代码发现有一个线程在空转,拉高了cup while(true){ } 解决方案,循环中加入延迟:Thread.sleep(Time): 总结下排查CP ...