python学习笔记(字典)

字典的使用

现实中的字段及在python中的字段都进行了构建,从而可以轻松查到某个特定的词语(键),从而找到它的意义(值)。

某些情况下,字典比列表更加适用:

#  表征游戏棋盘的状态,每个键都是由坐标值组成的元组;

#  存储文件修改次数,用文件名作为键;

#  数字电话/地址本

创建一个人名列表,以及四位的分机号码:

>>> names=[‘Alice‘,‘Beth‘,‘Ceci‘,‘Dee-Dee‘,‘Earl‘]
>>> numbers=[‘2341‘,‘9102‘,‘3158‘,‘0412‘,‘5551‘]
>>> numbers[names.index(‘Ceci‘)]#通过此方法查询
‘3158‘

创建和使用字典

字典可以通过下面的方式创建:

phonebook={‘Alice‘:‘2341‘,‘Beth‘:‘9102‘,‘Ceci‘:‘3158‘}

字典由多个键及与其对应的值构成,在上例中,名字是键,电话号码是值。

dict函数

可以用dict 函数,通过其他映射(比如其他字典)或(键,值)这样的序列对建立字典。

>>> itmes=[(‘name‘,‘Gumby‘),(‘age‘,42)]
>>> d=dict(itmes)
>>> d
{‘age‘: 42, ‘name‘: ‘Gumby‘}
>>> d[‘name‘]
‘Gumby‘

dict函数也可以通过关键字参数来创建字典,如下例所示
>>> d=dict(name=‘Gumby‘,age=42)
>>> d
{‘age‘: 42, ‘name‘: ‘Gumby‘}

基本字典操作

电话本例子

#简单数据库
#使用人名作为键的字典。每个人用一个字典来表示,其键‘phone’和‘addr’分别表示他们的电话号码和地址。
people={
‘Alice‘:{
‘phone‘:‘2341‘,
‘addr‘:‘Foo drive 23‘
},
‘Beth‘:{
‘phone‘:‘9102‘,
‘addr‘:‘Bar street 42‘
},
‘Cecil‘:{
‘phone‘:‘3158‘,
‘addr‘:‘Baz avenue 90‘
}
}

#针对电话号码和地址使用的描述性标签,会在打印输出的时候用到
labels={
‘phone‘:‘phone number‘,
‘addr‘:‘address‘
}
name=raw_input(‘Name: ‘)

#查找电话号码还是地址?使用正确的键:
request=raw_input(‘phone number(p) or address(a)?‘)

#使用正确的键:
if request ==‘p‘:key=‘phone‘
if request ==‘a‘:key=‘addr‘

#如果名字是字典中的有效键才打印信息:
if name in people: print "%s‘s %s is %s." %(name, labels[key], people[name][key])

--------------------------------------------

Name: Beth
phone number(p) or address(a)?p
Beth‘s phone number is 9102.

字典的格式化字符串

>>> phonebook={‘Beth‘:‘9102‘,‘Alice‘:‘2341‘,‘Cecil‘:‘3258‘}
>>> "Cecil‘s phone number is %(Cecil)s."%phonebook
"Cecil‘s phone number is 3258."

字典方法

clear

clear方法清除字典中所有的项。

>>> d={}
>>> d[‘name‘]=‘Gumby‘
>>> d[‘age‘]=42
>>> d
{‘age‘: 42, ‘name‘: ‘Gumby‘}
>>> returned_value=d.clear()
>>> d
{}
>>> print returned_value
None

>>> x={}
>>> y=x
>>> x[‘key‘]=‘value‘
>>> x
{‘key‘: ‘value‘}
>>> x={}
>>> y
{‘key‘: ‘value‘}

>>> x={}
>>> y=x
>>> x[‘key‘]=‘value‘
>>> y
{‘key‘: ‘value‘}
>>> x.clear()
>>> y
{}

copy

copy方法返回一个相同的具有键值对的新字典

>>> x={‘username‘:‘admin‘,‘machines‘:[‘foo‘,‘bar‘,‘baz‘]}
>>> y=x.copy()
>>> y
{‘username‘: ‘admin‘, ‘machines‘: [‘foo‘, ‘bar‘, ‘baz‘]}
>>> y[‘username‘]=‘mlh‘
>>> y[‘machines‘].remove(‘bar‘)
>>> y
{‘username‘: ‘mlh‘, ‘machines‘: [‘foo‘, ‘baz‘]}
>>> x
{‘username‘: ‘admin‘, ‘machines‘: [‘foo‘, ‘baz‘]}

可以看到当替换副本字典某个值时时原字典不受影响,但当修改某个值时,原字典也受影响

避免这种问题的方法就是使用深复制(deep copy),复制其包含的所有的值,可以使用copy模块中的deepcopy函数来完成

>>> from copy import deepcopy
>>> d={}
>>> d[‘names‘]=[‘alfred‘,‘bertrand‘]
>>> c=d.copy()
>>> c
{‘names‘: [‘alfred‘, ‘bertrand‘]}
>>> dc=deepcopy(d)
>>> dc
{‘names‘: [‘alfred‘, ‘bertrand‘]}

>>> d[‘names‘].append(‘Clive‘)
>>> c
{‘names‘: [‘alfred‘, ‘bertrand‘, ‘Clive‘]}
>>> dc
{‘names‘: [‘alfred‘, ‘bertrand‘]}

fromkeys

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

>>> {}.fromkeys([‘name‘,‘age‘])
{‘age‘: None, ‘name‘: None}
>>> dict.fromkeys([‘name‘,‘age‘])
{‘age‘: None, ‘name‘: None}

>>> dict.fromkeys([‘name‘,‘age‘],‘(unknown)‘)
{‘age‘: ‘(unknown)‘, ‘name‘: ‘(unknown)‘}

get

get是个更宽松的访问字典的方法

>>> d={}
>>> print d[‘name‘]

Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
print d[‘name‘]
KeyError: ‘name‘
>>> print d.get(‘name‘)
None

>>> d.get(‘name‘,‘N/A‘)
‘N/A‘
>>> d[‘name‘]=‘Eric‘
>>> d.get(‘name‘)
‘Eric‘

字典方法示例

#使用get()的简单数据库
people={
‘Alice‘:{
‘phone‘:‘2341‘,
‘addr‘:‘Foo drive 23‘
},
‘Beth‘:{
‘phone‘:‘9102‘,
‘addr‘:‘Bar street 42‘
},
‘Cecil‘:{
‘phone‘:‘3158‘,
‘addr‘:‘Baz avenue 90‘
}
}
#这里添加代码清单插入数据库的代码
labels={
‘phone‘:‘phone number‘,
‘addr‘:‘address‘
}
name=raw_input(‘Name: ‘)

#查找电话号码还是地址?
request=raw_input(‘phone number(p) or address(a)?‘)

#使用正确的键
key=request #如果请求的既不是‘p’也不是‘a’
if request ==‘p‘:key=‘phone‘
if request ==‘a‘:key=‘addr‘

#使用get()提供的默认值
person=people.get(name,{})
label=labels.get(key,key)
result=person.get(key,‘not available‘)
print "%s‘s %s is %s."%(name,label,result)

----------------------------------------

Name: Beth
phone number(p) or address(a)?batting average
Beth‘s batting average is not available.

has_key

has_key方法可以检查字典中是否有给出的键

>>> d={}
>>> d.has_key(‘name‘)
False
>>> d[‘name‘]=‘Eric‘
>>> d.has_key(‘name‘)
True

items和iteritems

items方法将所有字典项以列表方式返回,这些列表项中的每一项都来自(键,值)。但是项在返回值时并没有特殊的顺序

>>> d={‘title‘:‘python web site‘,‘url‘:‘http://www.python.org‘,‘spam‘:0}
>>> d.items()
[(‘url‘, ‘http://www.python.org‘), (‘spam‘, 0), (‘title‘, ‘python web site‘)]

iteritems方法作用大致相同,但是会返回一个迭代器对象而不是列表
>>> it=d.iteritems()
>>> it
<dictionary-itemiterator object at 0x02A87A80>
>>> list(it) #将迭代器转换为列表
[(‘url‘, ‘http://www.python.org‘), (‘spam‘, 0), (‘title‘, ‘python web site‘)]

keys和iterkeys

keys方法将列表中的键以列表形式返回,iterkeys返回针对键的迭代器

d={‘title‘:‘python web site‘,‘url‘:‘http://www.python.org‘,‘spam‘:0}

>>> d.keys()
[‘url‘, ‘spam‘, ‘title‘]
>>> hs=d.iterkeys()
>>> hs
<dictionary-keyiterator object at 0x02A87A50>
>>> list(hs)
[‘url‘, ‘spam‘, ‘title‘]

pop

pop方法用来获得对应于给定的键值,然后将这个键值从字典中移除

>>> d={‘x‘:1,‘y‘:2}
>>> d.pop(‘x‘)
1
>>> d
{‘y‘: 2}

popitem

popitem方法类似与list.pop,后者会弹出列表的最后一个元素,popitem则会弹出随机项,因为字典没有顺序的概念

>>> d={‘title‘:‘python web site‘,‘url‘:‘http://www.python.org‘,‘spam‘:0}
>>> d.popitem()
(‘url‘, ‘http://www.python.org‘)
>>> d
{‘spam‘: 0, ‘title‘: ‘python web site‘}

setdefault

setdefault方法在某种程度上类似于get方法,就是能够获得给定键的相关值,除此之外,setdefault还能在不含有给定的键的情况下设定键值

>>> d={}
>>> d.setdefault(‘name‘,‘N/A‘)
‘N/A‘
>>> d
{‘name‘: ‘N/A‘}
>>> d[‘name‘]=‘Gumby‘
>>> d.setdefault(‘name‘,‘N/A‘)
‘Gumby‘
>>> d
{‘name‘: ‘Gumby‘}

>>> d={}
>>> print d.setdefault(‘name‘)
None
>>> d
{‘name‘: None}

update

update方法可以利用一个字典更新另一个字典

>>> d={‘title‘:‘python web site‘,‘url‘:‘http://wwww.python.org‘,‘changed‘:‘mar 14 22:09:15 met 2008‘}
>>> x={‘title‘:‘python language website‘}
>>> d.update(x)
>>> d
{‘url‘: ‘http://wwww.python.org‘, ‘changed‘: ‘mar 14 22:09:15 met 2008‘, ‘title‘: ‘python language website‘}

values和itervalues

values方法以列表的形式返回字典中的值,itervalues返回迭代器

>>> d={}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d[4]=1
>>> d.values()
[1, 2, 3, 1]

>>> it=d.itervalues()
>>> it
<dictionary-valueiterator object at 0x028466F0>
>>> list(it)
[1, 2, 3, 1]

时间: 2024-10-11 11:34:14

python学习笔记(字典)的相关文章

Python学习笔记-字典(上)

字典是python独特的一种映射关系的数据类型,由成对的键值(项)组成. 建立方法: 1.直接输入键值建立 items ={'apple':'$5','pear':'$4','banana':'6'} print items['apple'] $5 注意一定使用{ }, 否则成了列表. 2. 通过dict函数从列表建立 items =[['apple','$5'],['pear','$4'],['banana','6']] print items print items[0:1] ditems 

Python学习笔记-字典(下)

同列表和字符串一样,字典也有方法. clear 清空字典中的所有项. 我们可以把空字典赋给某一字典来清空它当中的项.也可以使用clear方法彻底清空字典. x= {} y=x x['age']='25' x['gender']='male' print x  x.clear() print x  print y  {'gender': 'male', 'age': '25'} {} {} 如果将 x.clear 改为 x={},则结果变为 {'gender': 'male', 'age': '2

python学习笔记字典(四)

字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的.可哈希表示key必须是不可变类型,如:数字.字符串.元组. 字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型.列表是有序的对象结合,字典是无序的对象集合.两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取. 创建字典:  = {::} sh

Python学习笔记-字典

字典是python中唯一内建的映射类型. 创建字典phonebook = {'Alice':'2341','Beth':'9102'} 可以使用dict通过其他映射或者键值对的序列建立字典.关键值参数来创建字典. len(d)d中项的数量.d[k]返回关联到键的值,d[k] = v给键赋值,del d[k]删除键k,k in d是否含有键k. 键类型,自动添加,成员资格. 字典的格式化字符串. 方法: 1.clear清除字典中所有的项.在原地操作. 2.copy浅复制,改变值对原数据无影响,删除

Python学习笔记:字典(dict)有关内容

字典是Python中唯一的映射类型.映射类型对象里哈希值(键:key),和指向的对象(值:value),是一对多的关系,也就是 字典的元素分为两个部分,分别是键和值,一个键对应一个值,键不能够重复,值可以重复. 1.创建字典. (1).字典是用大括号({})来包含元素的,基本创建就是直接赋值,键不能是元组或者列表,但是值可以是. >>> D = {'a':1,'b':2,'c':3}<span style="white-space:pre"> </s

Python学习笔记——字典

1.创建字典和给字典赋值,可以使用工厂方法dict()来创建字典,也可以使用fromkeys()来创建一个元素具有相同值的字典 >>> dict = {'name':'XiaoMing','age':20} >>> dict {'age': 20, 'name': 'XiaoMing'} >>> dict2 = dict((['x',1],['y',2])) >>> dict2 {'y': 2, 'x': 1} >>>

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

python学习笔记4:字典

python学习笔记4:字典 总结:字典是可变变量: 字典是不排序的,所以不能像列表,元组,字符串一样,切片 1.定义字典dict  --花括号{},字典的只是key-value形式 比如:stu={'name':'zhangying','age':18,'score'=99} 2.key取值,get()方法取值 1)dictname[key] , 取key对应的value值,如果不存在,报错 2)dictname.get(key) , 取key对应的value值,如果不存在,返回none:还可

python 学习笔记 三 字典

字典 Python的高效的key/value哈希表结构叫做"dict", dict的内容可以写成一系列的key:value对并放入{ }中, 相当于: dict = {key1:value1, key2:value2, ...}, 一个空的字典就是俩个大括号{ }. 下面是从一个空字典创建字典以及一些关键点: 数字, 字符串和元组可以作为字典的key, value可以是任何类型(包括字典). ## Can build up a dict by starting with the the

《python基础教程(第二版)》学习笔记 字典(第4章)

<python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),('key2','value2')]; d=dict(lst)d=dict(key1='value1', key2='value2')字典基本操作:d={'key1':'value1','key2':'value2'}; len(d) ==> 2 #字典中的键值对数量d={'key1':'value1','