Python字典是另一种可变容器模型,可以存储任意类型的对象,如字符串、数字、元组等容器模型。1.创建字典字典由成对的键和对应的值组成。字典也称为关联数组或哈希表。基本语法如下:dict={'Alice':'2341','Beth':'9102','Cecil':'3258'}#你也可以像这样创建字典dict1={'abc':456}dict2={'abc':123,98.6:37}注意:每个key和value用冒号(:)隔开,每对用逗号隔开,每对用逗号隔开,整个包含在大括号({})中。键必须是唯一的,但值不是。值可以是任何数据类型,但必须是不可变的,例如字符串、数字或元组。2.访问字典中的值,将对应的键放入熟悉的方括号中,如下例:dict={'Name':'Zara','Age':7,'Class':'First'}print("dict['Name']:",dict['Name'])print("dict['Age']:",dict['Age'])#上面例子的输出结果:#dict['Name']:Zara#dict['Age']:7如果用字典中不存在的key访问数据,会输出如下错误:dict={'Name':'Zara','Age':7,'Class':'First'}print("dict['Alice']:",dict['Alice'])#上面例子的输出:#KeyError:'Alice'3.修改dictionary向字典添加新内容的方式是添加新的键/值对,修改或删除已有的键/值对,如下所示:dict={'Name':'Zara','Age':7,'Class':'第一'}dict['年龄']=8;#更新现有的entrydict['School']="DPSSchool";#添加新条目print("dict['Age']:",dict['Age'])print("dict['School']:",dict['School'])#上面例子的输出结果:#dict['Age']:8#dict['School']:DPSSchool4.删除字典元素可以删除单个元素清空字典,清空只需要一次操作。显示用del命令删除字典,例子如下:dict={'Name':'Zara','Age':7,'Class':'First'}deldict['Name']#deletekeyis'Name'dict.clear()#清除字典中的所有条目KeyError:'Age'deldict#删除字典TypeError:'type'objectisnotsubscriptableprint("dict['Age']:",dict['Age'])#但是这样会出现异常,因为使用del之后字典已经不存在了。五、字典键的特点字典值可以不受限制地取任何python对象,可以是标准对象,也可以是用户自定义对象,但键不能。有两点要记住:1)同一个键不允许出现两次。如果同一个键在创建过程中分配了两次,后面的值将被记住,如下例所示:dict={'Name':'Zara','Age':7,'Name':'Manni'}print("dict['Name']:",dict['Name'])#上面例子的输出:#dict['Name']:Manni2)key必须是不可变的,所以可以作为数字使用,stringortuple,所以不能用list,如下例子:dict={['Name']:'Zara','Age':7}print("dict['Name']:",dict['Name'])#上面例子的输出Result:#TypeError:unhashabletype:'list'六、字典内置函数&方法Python字典包含以下内置函数:cmp(dict1,dict2)#比较两个字典元素。len(dict)#计算字典元素个数,即key的总数。str(dict)#输出字典的可打印字符串表示。type(variable)#返回输入的变量类型,如果变量是字典,则返回字典类型。python字典中判断一个key是否存在一般有两种常用的方法:第一种方法:利用自身函数实现:python字典的属性方法中有一个has_key()方法:#generateadictionaryd={'name':Tom,'age':10,'Tel':110}#打印返回值printd.has_key('name')#结果返回True方法二:使用in方法:#生成一个dictionaryd={'name':Tom,'age':10,'Tel':110}#打印返回值,其中d.keys()是列出字典print'name'ind中的所有键。keys()print'name'ind#两个结果都返回True。除了使用in,还可以使用notin来判断key不存在。使用in比has_key更快。python字典是根据值排序的。我说几个解决办法。有时间的话我再详细说说d={'a':1,'b':4,'c':2}字典是这样的,然后字典按值排序方法一:sorted(d.items(),key=lambdax:x[1],reverse=True)方法二:importoperatorsorted(d.items(),key=operator.itemgetter(1))方法三:f=zip(d.values(),d.keys())sorted(f)//结果为[(1,'a'),(2,'c'),(4,'b')]zip,zip函数会排序第一个元素默认,如何取消排序?OrderedDict有序字典以及读取json字符串时如何保持原来的顺序1.OrderedDict有序字典OrderedDict是dict的子类,它会记住内容添加的顺序。字典本身是无序的。OrderedDict之所以能记住顺序,是将对应关系转化为元组存储,通过列表记录顺序,从而实现保持原有顺序的功能。OrderedDict([(3,'A'),(2,'B'),(1,'C')])原始字典的存储形式是这样的{1:'C',2:'B',3:'A'}比较时,OrderedDicts只有内容和顺序完全一致才算相等。示例:importcollectionsd=collections.OrderedDict()d[3]='A'd[2]='B'd[1]='C'fork,vind.items():print(k,v)结果是有序的(按程序读取的顺序输出)如果d是一般的dict,则结果是倒序的(输出顺序与key值有关)2.如何保持原来的顺序when读取json字符串importjsonfromcollectionsimportOrderedDictmetadata=json.loads(text,object_pairs_hook=OrderedDict);元数据中属性的顺序与文本中定义的顺序相同。
