Python学习笔记(四)

Published: 2014-01-23 Category: python Tags: python

Python学习四

在学习python之前,个人建议先看下维基的python介绍。

临近春节,公司事儿也挺多,一直没时间学习,今天也是好不容易找点时间看书,一起来学习下python的第四部分。回忆下上节的内容,上节中我们讲到了python的字符串方法。如:find()、join()、lower()、replace()、split()、strip()等等。本部分 学习中我们将学到一种通过名字引用值的数据结构。这种结构类型称为映射。字典是 python中唯一内建的映射类型。字典中的值都没有特殊的顺序,但是都存储在一个特定的键(key)里。键可以是数字、字符串甚至是元祖。

##创建和使用字典

4.1 dict函数


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

phonebook = {'jia':'13480657524','dong':'15896523654','qi':'15085203698'};

简单说来:字典就是多个键值对的组成。空字典由两个大括号({})组成。 注意:**字典中的键是唯一的(其他类型的映射也是如此),而值并不唯一。

>>> items = [('name','jia58960'),('age',24)]
>>> d = dict(items)
>>> d
{'age': 24, 'name': 'jia'}

>>> d2 = dict(name='jia',age=24) #dict函数也可以通过关键字参数来创建字典
>>> d2
{'age': 24, 'name': 'jia'}

4.2 基本字典操作


len(d):返回字典d中键值对的数量;d[k]返回字典d中键为k的值;d[k]=v将v赋值到d中k键; del d[k]删除键为k的项; k in d检查d中是否含有键为k的项。

尽管字典和列表很多特性都相同,但是也有一些重要却别;

  • 字典的键不一定为整型数据,也可能是其他不可变类型,如:浮点型字符串或者元祖。

  • 即使那个键期初在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。

  • 表达式 k in d(d为字典) 查找的是键,不是值,表达式v in l(l为列表)查找的是值,而不是索引。

注意:在字典中检查键的成员资格比在列表中检查值的成员资格效率更高。数据越大两者 的差距也越明显。

键可以为任何不可变类型是字典最强大的地方,然后我们验证下上面提到的字典第二点特性:

>>> li = []
>>> li[4] = 'jia'

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    li[4] = 'jia'
IndexError: list assignment index out of range
>>> dic = {}
>>> dic[4]='jia'
>>> dic
{4: 'jia'}
>>> 

#### 字典的格式化字符串 ******** 若使用只以字符串作为键的字典会使字符串的格式化更cool一些。在每个转换说明符中 的%后面加上用圆括号括起来的键,后面再跟上说明元素。看例子:

>>> d = {'age': 24, 'name': 'jia'}
>>> "%(name)s 's age is %(age)s "% d
"jia 's age is 24 "
>>> 

这类字符串格式化在模板系统中非常有用。

字典方法


  • clear()清除字典中的所有的项。无返回值或者说返回为None。

  • copy()返回一个具有相同键值对的新字典。以下两个例子来说明这个方法:

>>> d = {}
>>> d['name'] = ['jia','58960','dong','douramy']
>>> d
{'name': ['jia', '58960', 'dong', 'douramy']}
>>> dc = d.copy()
>>> dc['name'].remove('jia')
>>> dc
{'name': ['58960', 'dong', 'douramy']}
>>> d
{'name': ['58960', 'dong', 'douramy'], 'user': 'jia58960'}
>>> 
  • fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None。也可以自定义默认值。
>>> dict.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'],'(unkowm)')
{'age': '(unkowm)', 'name': '(unkowm)'}
>>> 
  • get方法是更宽松的访问字典项的方法。一般如果试图访问字典中不存在的项时就会出错,而用 get就不会。
>>> d = {}
>>> print d.get('name')
None
>>> d = {'name':'jia58960','age':23}
>>> d.get('name')
'jia58960'
>>> d.get('weight','N/A')
'N/A' #可以看到如果键存在get就返回正确的值,也可以自定义“默认”值来替换None
>>> 
  • has_key方法用以检查字典中是否含有给出的键。表达式d.has_key(k)相当于表达式k in d.到底 使用哪个表达式完全取决于个人爱好。Python 3.0中不包含这个函数。

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

Fork me on GitHub