Python:字典、集合

 字典  

        字典类型是 Python 中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。

        字典没有索引,它由键(key)和键值(value)组成,key相当于是“索引”,value相当于是索引所对就的内容。其中key可以是数字、字符串或元组,但不能是列表,value均可,且key是唯一的,不能重复,如果重复,只保留最后一个

        Python  中的字典类型相当于 Java 或者 C++ 中的  Map  对象。

        Python  字典类型的语法格式如下:

        dictName = {'key1':'value1','key2':'value2',...,'keyn':valuen}

创建字典常用方法:

1)dict1 = {"李白":"静夜思","苏轼":"江城子","王之焕":"登鹳雀楼"}                    #正确

     dict1 = {("李白":"静夜思"),("苏轼":"江城子"),("王之焕":"登鹳雀楼")}              #错误,此法定义的是个集合

2)dict1 = dict((("李白","静夜思"),("苏轼","江城子"),("王之焕","登鹳雀楼")))     #正确,元组转换为字典

     dict1 = dict([("李白","静夜思"),("苏轼","江城子"),("王之焕","登鹳雀楼")])      #正确   列表转换为字典

3)  dict1 = dict(李白 = "静夜思",苏轼 = "江城子",王之焕 = "登鹳雀楼")             #正确

     dict1 = dict("李白" = "静夜思","苏轼" = "江城子","王之焕" = "登鹳雀楼")      #错误

4)list1 = ["李白", "苏轼", "王之焕"]

      list2 = ["静夜思", "江城子", "登鹳雀楼"]

      dict1 = dict(zip(list1, list2))                                #适用于两组数列转换为字典,若数列长度不同以短的为准

      print(dict1)

打印结果:{'李白': '静夜思', '苏轼': '江城子', '王之焕': '登鹳雀楼'}

4)dict1 = {}

      dict1["李白"] = "静夜思"

      dict1["苏轼"] = "江城子"    #此方法常用来修改键值(或添加字典元素),如果没有该键,就会新增这个键和对应值(列表和元组没有的索引赋值是会报错的,提示超出索引)

5)dict1 = {}

     dict1.fromkeys(("李白","苏轼","王之焕"),"古人")

      输出:  {'李白': '古人', '苏轼': '古人', '王之焕': '古人'}       #此方法赋值后,dict1还是为空

字典常用函数:

1)keys()函数

dictName.keys()       #可输出字典中的所有键(key)

>>> dict1.keys()
dict_keys(['李白', '苏轼', '王之焕'])

2)values()函数

dictName.values()    #可输出字典中的所有键值(value)

>>> dict1.values()
dict_values(['静夜思', '江城子', '登鹳雀楼'])

3)items()函数

dictName.items()    #可输出字典中的所有项

>>> dict1.items()
dict_items([('李白', '静夜思'), ('苏轼', '江城子'), ('王之焕', '登鹳雀楼')])

4)get()函数
        读取或调用字典中某个键的值,如果直接用dictName[key]调用,key不存在的话会报错,用dictName.get(key,"……"),如果key存在,输出对应value,不存在,则输出“……”,get()的第二个参数可不写,不写的话不存在时输出None
另外可用成员操作符in来判断某个键(key)是否存在字典中,这里注意只能判断key,不能判断value
>>> "李白" in dict1
True
>>> "静夜思" in dict1
False

5)  update(dictName2)
     dictName1.update(dictName2)      #相当于把字典2粘贴到字典1,重复的key对应值替换更新,可用于修改或添加字典元素

6)其它

     pop(keyName)       #用于获取指定  key  对应的  value,并删除这个键值对。

     popitem()   #方法用于随机弹出字典中的一个键值对。
        (注意,此处的随机其实是假的,它和  list.pop()  方法一样,也是弹出字典中最后一个键值
对。但由于字典存储键值对的顺序是不可知的,因此  popitem()  方法总是弹出底层存储的最后一个键值对。)

     copy()

     clear()

集合

        Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。

        从形式上看,和字典类似,Python  集合会将所有元素放在一对大括号  {}  中,相邻元素之间用“,”分隔,如下所示: 
        {element1,element2,...,elementn}

        同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则  Python  解释器会抛出  TypeError  错误。

        Python  中有两种集合类型,一种是  set  类型的集合,另一种是  frozenset  类型的集合,它们唯一的区别是,set  类型集合可以做添加、删除元素的操作,而  forzenset  类型集合不行

set:

        Python  提供了  2  种创建  set  集合的方法,分别是使用  {}  创建和使用  set()  函数将列
表、元组等类型数据转换为集合。

        添加删除元素方法:

        1)setname.add(element) 

        2)setname.remove(element)      #如果被删除元素本就不包含在集合中,则此方法会抛出KeyError  错误

        集合之间可以进行交集(&)、并集(|)、差集(-)以及对称差集(^)运算。

frozenset:

       frozenset()函数:

        setName =  frozenset()               #setName为空的frozenset

        setName = frozenset({element1,element2,……,elementn})    #setName为frozenset类型

        setName2 = frozenset(setName1)    #setName2为frozenset类型,setName1仍为set类型

        frozenset  的作用主要有两点:
        1)当集合元素不需要改变时,使用frozenset代替set更安全。
        2)当某些  API  需要不可变对象时,必须用  frozenset  代替 set。比如 dict 的 key 必须是不可变对象,因此只能用  frozenset;再比如set本身的集合元素必须是不可变的,因此set不能包含 set,set  只能包含 frozenset。

猜你喜欢

转载自blog.csdn.net/chn_zx/article/details/131886344