字典

1、    概述

字典是一个无序的数据集合,序列类型用有序的数字键做索引将数据以数组的形式存储。

在字典中能获得的有序集合只能是键的集合或者是值得集合,方法keys()或者value()返回一个列表,该列表是可以排序的,也可以使用items()方法得到包含键、值对的元组的列表来进行排序,字典本身是无序的。

哈希表拥有很好的性能,从而在使用键进行查询的时候,速度很快。

1.1    创建字典

创建字典有三种方法:

第一种直接使用大括号{}来进行创建并赋值,使用方法如下:

Diction= {“xy”:1,“ab”:2}

第二种使用工厂方法dict()来进行创建:

Diction= dict(([“x”,”y”],[1,2]))

第三种使用内建方法fromkeys()来创建默认的字典,字典元素中具有相同的值,当没有给出值得时候,默认为None:

Diction= {}.fromkeys((“x”,”y”),-1)

>>> diction = {"x":1,"y":2}

>>> diction

{'y': 2, 'x': 1}

>>> diction = dict(([1,2],["x","m"]))

>>> diction

{1: 2, 'x': 'm'}

>>> diction = {}.fromkeys(("x","y"),"abc")

>>> diction

{'y': 'abc', 'x': 'abc'}

>>>

1.2    访问字典中的值

访问字典中的值,可以直接使用key来进行访问,例如diction[“x”]

在进行遍历循环的时候,可以使用keys()来进行遍历,也可以直接对字典进行遍历:

>>> diction

{'y': 'abc', 'x': 'abc'}

>>> diction["y"]

'abc'

>>> for i in diction:

...     print i,diction[i]

...

y abc

x abc

>>> for i in diction.keys():

...     print i,diction[i]

...

y abc

x abc

>>> diction = {}.fromkeys(("x",1))

>>> diction

{'x': None, 1: None}

当在字典中不存在此键的时候,会返回一个错误,keyerror,在判断键是否在字典中,可以使用in或者是not in来进行判断:

>>> diction

{'x': None, 1: None}

>>> diction["kel"]

Traceback (most recent call last):

File "<stdin>", line 1, in ?

KeyError: 'kel'

>>> "kel" not in diction

True

>>> "x" in diction

True

1.3 更新字典

在修改字典的时候,可以直接添加一个新的数据项或者是新元素(一个键一个值),修改一个已经存在的数据项,或者删除一个已存在的数据项:

>>> diction

{'x': None, 1: None}

>>> diction["kel"] = "kel"

>>> diction

{'x': None, 'kel': 'kel', 1: None}

>>> diction["x"] = "change the string"

>>> diction

{'x': 'change the string', 'kel': 'kel', 1: None}

在进行print的时候,可以简化pring语句,如下:

>>> print "the x is %(x)s ,and the kel is %(kel)s" %diction

the x is change the string ,and the kel is kel

>>> diction

{'x': 'change the string', 'kel': 'kel', 1: None}

1.4 删除字典元素和字典

删除字典元素的例子如下:

>>> diction

{'x': 'change the string', 'kel': 'kel', 1: None}

>>> del diction["x"]

>>> diction

{'kel': 'kel', 1: None}

>>> diction.pop(1)

>>> diction

{'kel': 'kel'}

不要使用dict,list,file,bool,str,input,len这样的内建类型作为变量命名。

2、 字典操作符

字典可以喝所有标准类型操作符一起工作,但却不支持像拼接和重复这样的操作,这些操作队序列式有意义的,但是对字典类型不行。

字典可以进行比较,可以使用in或者not in来检查键是否存在于字典中。

在字典进行比较的时候,先比较字典的长度,然后比较字典的键,然后比较字典的值,当完全相同的时候,那么返回为0,也就是cmp函数的比较。

3、 字典相关函数

3.1 dict()

工厂函数用来创建字典,当不提供参数的时候,会生成空字典;当容器类对象作为一个参数传递给方法dict()的时候,必须是成对出现的。

>>> diction = dict(([1,2],[3,4]))

>>> diction

{1: 2, 3: 4}

>>> diction = dict(zip(("x","y"),(1,2)))

>>> diction

{'y': 2, 'x': 1}

>>> dict([("xy"[i-1],i) for i in range(1,3)])

{'y': 2, 'x': 1}

>>> diction = dict("1"=2,"3"=4)

SyntaxError: keyword can't be an expression

>>> diction = dict(x=2,y=4)

>>> diction

{'y': 4, 'x': 2}

3.2 sorted()

使用sorted内建函数得到一个有序的迭代:

>>> for eachKey in sorted(diction):

...     print "diction key",eachKey,"has value",diction[eachKey]

...

diction key x has value 2

diction key y has value 4

3.3 update()

使用update方法将一个字典的内容添加到另外一个字典中,重复的将被覆盖,部存在的键将被添加到字典中,clear()方法用来删除字典中的所有条目:

>>> diction

{'y': 4, 'x': 2}

>>> dictionA = {}.fromkeys((1,"x"),("nothin","something"))

>>> dictionA

{1: ('nothin', 'something'), 'x': ('nothin', 'something')}

>>> diction.update(dictionA)

>>> diction

{'y': 4, 'x': ('nothin', 'something'), 1: ('nothin', 'something')}

>>> diction.clear()

>>> diction

{}

3.4 copy()

Copy方法返回一个字典的副本,在这个时候使用的是浅复制,get()方法和键查找操作符[]相似,不同的是它允许你为不存在的键提供默认值,如果该键不存在,并且没有给出默认值,那么将返回None,在这个时候不用担心因键不存在从而导致的异常。

>>> diction

{'y': 2, 'x': 1}

>>> dictionA = diction.copy()

>>> dictionA

{'y': 2, 'x': 1}

>>> dictionA.get("x")

1

>>> dictionA.get("kel")

>>> dictionA.get("kel","no such key")

'no such key'

>>> dictionA["kel"] = "kel"

>>> dictionA

{'y': 2, 'x': 1, 'kel': 'kel'}

>>> diction

{'y': 2, 'x': 1}

>>> diction["new"] = "new"

>>> diction

{'y': 2, 'x': 1, 'new': 'new'}

>>> dictionA

{'y': 2, 'x': 1, 'kel': 'kel'}

3.5 setdefault()

Setdefault方法主要用来检查字典中是否含有某键,如果键存在,那么取值;如果键部存在,那么将这个键进行复制,并返回值:

>>> diction

{'y': 2, 'x': 1}

>>> diction.setdefault("y","kel")

2

>>> diction

{'y': 2, 'x': 1}

>>> diction.setdefault("kel","setdefault")

'setdefault'

>>> diction

{'y': 2, 'x': 1, 'kel': 'setdefault'}

3.6 fromkeys()

Fromkeys主要用来创建字典,如下所示:

>>> {}.fromkeys("xyz")

{'y': None, 'x': None, 'z': None}

>>> {}.fromkeys(("kel","other"),True)

{'kel': True, 'other': True}

3.7 其他方法

Keys(),items(),values()方法的返回值都是列表,在数据集很大的时候会导致很难处理,从而出现了方法iteritems(),iterkeys(),itervalues(),使用这些方法的时候比较节省内存。

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()方法语法: ...

随机推荐

  1. 使用struts taglib导致java.lang.NullPointerException: Module 'null' not found.

    比如说,只要jsp的代码里有<html:....>或者<bean:...>之类的struts标签就会在访问该jsp页面的时候报这个错 最后参考这篇文章,发现原来是因为web.x ...

  2. c# 获取字符串数组中最长的的字符串并输出最长的字符串

    求字符串数组中最大长度的字符串: 实质就是比较字符串的长度: 方案一: class Program { static void Main(string[] args) { string[] array ...

  3. js学习之道:表单验证公共js

    /** 文件名称:CommonUtil.js 作者  : Yuce 编制时间: 2010-03-24 文件内容:一些常用的js公用类.工具类 包括方法: g_FormFieldIsNull    判断 ...

  4. POJ -3050 Hopscotch

    http://poj.org/problem?id=3050 给定一个5×5矩阵,问选6个数的不同排列总数是多少! 二维的搜索,注意要判重,数据量很小,直接用map就好. #include<cs ...

  5. 51nod1476 括号序列的最小代价

    这题应该可以用费用流写吧?不过我想不出贪心来TAT.其实还是单调队列乱搞啊T_T //ÍøÉϵÄ̰ÐÄËã·¨ºÃÉñ°¡¡£¡£¡£ÎÒÖ»»áÓÃ×îС·ÑÓÃ×î´óÁ÷ÅÜTAT #in ...

  6. [转] POJ字符串分类

    POJ 1002 - 487-3279(基础)http://acm.pku.edu.cn/JudgeOnline/problem?id=1002题意:略解法:二叉查找数,map,快排... POJ 1 ...

  7. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

  8. shell动态解析sql的binlog

    #!/usr/bin #设置数据库连接 conn='mysql -hhost -Pport -uusername -ppassword' #获取最新的binlog文件 logfile=$($conn ...

  9. iPad中控制器view初始的width和height

    1> 规律 * width 是宽高中最小的那个值 * height 是宽高中最大的那个值 2> 举例(比如窗口根控制器的view,有状态栏的情况下) * 横屏  width = 748,h ...

  10. UVA 11865 Stream My Contest 组网 (朱刘算法,有向生成树,树形图)

    题意: 给n个点编号为0~n-1,0号点为根,给m条边(含自环,重边),每条边有个代价,也有带宽.给定c,问代价不超过c,树形图的最小带宽的最大值能达到多少? 思路: 点数才60,而带宽范围也不大,可 ...