Python的字典属于一种数据类型,我们可以把数据存到字典里面,字典使用大括号“{}”来定义。
比如现在要存储一个人的信息然后读取出来,就可以使用切片的方式来体现:In [1]: info ='Tom 180 Male'In [2]: info[1:3]Out[2]: 'om'In [3]: info[0:3]Out[3]: 'Tom'
那么如果我们要存很多人的信息呢?
也许我们可以先把信息单个地分别存到一个列表里,然后再把他们合并,然而这样的方式在数据量很大的情况下是很麻烦的,如下所示:
In [4]: list1=['name','age']In [5]: list2=['tom','20']In [6]: list3=['mike','24']In [7]: zip(list1,list2)Out[7]: [('name', 'tom'), ('age', '20')]In [8]: list1Out[8]: ['name', 'age']In [9]: list2Out[9]: ['tom', '20']In [10]: zip(list1,list3)Out[10]: [('name', 'mike'), ('age', '24')]
字典是Python中唯一的映射类型(哈希表),其对象是可变的,但是字典的键必须使用不可变对象,一个字典中可以使用不同类型的键值,方法可以有:
keys() values() items();首先我们可以创建一个空字典:
In [11]: dict={}In [12]: type(dict)Out[12]: dict
往里面定义数据如下:
In [13]: dict={ 'a':1,1:123}In [14]: dictOut[14]: {1: 123, 'a': 1} #顺序是可变的,因为遵循哈希表
存入字典的数据类型应该用只读的,应保持哈希的结果不变:
In [15]: dict1={ 'a':1, 1:123, ('qq','wx'):'hello'}In [16]: dict1Out[16]: {1: 123, 'a': 1, ('qq', 'wx'): 'hello'}
查看字典的长度,可以看到我们刚刚定义的字典有3个元素:
In [17]: len(dict1)Out[17]: 3
在ipython中使用tab键我们可以查看字典有多少种方法
In [18]: dict.dict.clear dict.has_key dict.itervalues dict.setdefault dict.viewkeysdict.copy dict.items dict.keys dict.update dict.viewvaluesdict.fromkeys dict.iteritems dict.pop dict.values dict.get dict.iterkeys dict.popitem dict.viewitems
查看所有的keys值:
In [18]: dict1.keys()Out[18]: ['a', 1, ('qq', 'wx')]
查看所有的values值,也会同样返回一个列表,里面是字典所存储的所有values值:
In [19]: dict1.values()Out[19]: [1, 123, 'hello']
使用keys值查找values值:
In [16]: dict1Out[16]: { 1: 123, 'a': 1, ('qq', 'wx'): 'hello'}In [22]: dict1.get(1)Out[22]: 123
如果keys值不在所取的字典里,不会返回值,但是给定了keys,values的话,则会返回给的values值:
In [24]: dict1.get('b')In [25]: dict1.get('b','c')Out[25]: 'c'
判断keys是否存在于字典:
In [26]: 'v' in dict1Out[26]: FalseIn [27]: 'a' in dict1Out[27]: True
或者也可以这样判断:
In [28]: dict1.has_key('v')Out[28]: FalseIn [29]: dict1.has_key('a')Out[29]: True
使用items可以将字典返回为一个列表,成为列表之后就可以对其遍历,或者切片,然后得到想要的结果:
In [16]: dict1Out[16]: {1: 123, 'a': 1, ('qq', 'wx'): 'hello'}In [30]: dict1.items()Out[30]: [('a', 1), (1, 123), (('qq', 'wx'), 'hello')]
往字典里面更新内容,或者把两个字典更新成一个字典:
In [35]: dict1Out[35]: {1: 123, 'a': 1, ('qq', 'wx'): 'hello'}In [36]: dict2Out[36]: { 'e': 3, 'q': 1, 'w': 2}In [37]: dict.update(dict1,**dict2)In [38]: dictOut[38]: {1: 123, 'a': 1, 'e': 3, 'q': 1, 'w': 2, ('qq', 'wx'): 'hello'}
用for循环输出字典的keys和values:
In [47]: for k in dict1: ....: print k,dict1[k] ....: a 11 123('qq', 'wx') hello
或者先用items让字典返回一个列表,再for循环:
In [50]: dict1.items()Out[50]: [('a', 1), (1, 123), (('qq', 'wx'), 'hello')]In [51]: for k, v in dict1.items(): print k,va 11 123('qq', 'wx') hello
字典练习
#!/usr/local/python3/bin/pythoninfo={}name=input("Please input a number : ")age=input("Please input your age : ")sex=input("Please input your sex(M/F) : ")info['name']=name #下标为name的存到info字典里面info['age']=ageinfo['sex']=sex#print(info)#print(info.items())for i,w in info.items(): print('%s : %s' % (i,w))
运行情况如下:
Please input a number : zyyPlease input your age : 21Please input your sex(M/F) : Fname : zyyage : 21sex : F