关键词搜索

源码搜索 ×
×

Python学习:字典和集合

发布2019-01-04浏览857次

详情内容

映射:映射可以使用任意不可变对象标识元素。最常用的是字符串和元祖

Python中唯一内建的映射类型是字典

一、 字典

字典中的键是唯一的

创建和访问字典
字典标志性符号,就是用大括号{ }定义,是Python中唯一的映射类型,指的是两个元素集之间元素的相互“对应关系。它和序列不同,字典讲求映射,序列讲求顺序。
字典的键必须是独一无二的,但是值可以取任何类型,但必须是不可以改变的。

dict1 = {"英语":"Englist","中文":"Chinese"}	#“英语”和“中文”称为键,“English”和“Chinese”是其对应的值
#创建字典的方式:
dict1 ={"狗":"看家","猪":"卖钱","人":"学习"}
dict1 = dict((('a',1),('b',2),('c',3),('d',4)))
dict1 = dict(a=1,b=2,c=3,d=4)	#此时键的位置不能加上字符串的引号,否则报错
dict1['d']=67	#修改键的值,若键不存在则创建新键
# 结果值:dict1 = {'b': 2, 'd': 67, 'c': 3, 'a': 1}

    fromkeys():创建并返回一个新的字典,含有两个参数,第一个是字典的键,第二个是传入键对应的值(可选的)

    dict1 = {}
    a= dict1.fromkeys((1,2,3))	#还可以写成{}.fromkeys((1,2,3))
    # 或者直接写为:a= dict.fromkeys((1,2,3))	
    # 第二个参数如果不提供则默认为空  a = {1: None, 2: None, 3: None}
     a= dict1.fromkeys((1,2,3),('a','b','c'))
    # 结果 {1: ('a', 'b', 'c'), 2: ('a', 'b', 'c'), 3: ('a', 'b', 'c')}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    keys():返回字典的键;values():返回字典中的所有值;items():返回字典中的所有的键对值

    a= dict1.fromkeys(range(10),'good')
    a.keys()	#返回字典的键
    # dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    • 1
    • 2
    • 3

    values() 返回字典中所有的值

     a.values()	#返回字典中所有的值
    # dict_values(['good', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'good'])
    
    • 1
    • 2

    items () 返回字典中的所有键对值

    a.items ()	#返回字典中的所有键对值
    #dict_items([(0, 'good'), (1, 'good'), (2, 'good'), (3, 'good'), (4, 'good'), (5, 'good'), (6, 'good'), (7, 'good'), (8, 'good'), (9, 'good')])
    
    • 1
    • 2

    get():当键并不存在时,get()不会报错,只是默默返回一个None,表示啥都没找到。但是可以指定找不到数据时返回的值;setdefault()找不到对应的键时会自动添加。

    # a = {'one':1,'two':2}
     a.get(11)
    a.setdefault('three')
    # 找不到对应的键自动添加 a = {'one': 1, 'three': None, 'two': 2}
    
    • 1
    • 2
    • 3
    • 4

    clear():清空一个字典,清除字典中的所有项
    copy():复制字典,复制一个相同键-值对的新字典

    #clear():清空一个字典,清除字典中的所有项
    a.clear()
    #copy():复制字典,复制一个相同键-值对的新字典
    a ={'狗':'看门'}
    c = a.copy()	#c = {'狗': '看门'} 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    pop():给定键弹出对应的值,然后将这个键从字典中移除
    popitem():弹出一个随机的项,如果想一个一个移除并处理项,这个方法十分有用

    # b =  {'one':1,'two':2}
    b.pop()
    b.popitem()
    
    • 1
    • 2
    • 3

    update 方法:可以利用一个字典项更新另外一个字典
    提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖
    在这里插入图片描述

    二、 集合

    创建集合:一是直接用花括号 { }括起来,二是set()函数

    #创建集合有两种方法,一是直接用花括号{}括起来,二是set()函数
    set1 = {'a','b','c'}
    set2 =set(['a','b','c'])
    # set2 ==set1
    #集合的作用可以去除列表中重复的元素
    # temp = [1, 2, 3, 5, 4, 23, 5, 1, 'a', 'b', 'a']
    list3 = list(set(temp))	
    # list3 = [1, 2, 3, 4, 5, 'b', 23, 'a']	但是需要注意的是列表的前后顺序会被改变(自动把无序变为有序)
    
      8

    访问集合
    集合中的元素时无序的,不能像序列那样用下标来进行访问,可以使用迭代把集合中的数据一个一个读取出来。

    # 使用迭代方法,将集合中数据一个一个读取出来
    set1 = {1,2,3,4,5,2,3,1}
    for each in set1:
        print(each,end=' ')
    # 使用add()方法为集合添加元素
    set1.add(6)
    # 使用remove()方法删除集合中元素
    set1.remove(2)
    
      8

    == 不可变集合==
    当希望集合中数据具有稳定性,不可更改时,可以使用frozenset()函数。

    set1 = frozenset(set1)
    set1.add(3)	#更改时,会报错
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    AttributeError: 'frozenset' object has no attribute 'add'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、 补充

    1. 字典示例:简单数据库
    people = {
        'Alice':{
            "phone":"https://cdn.jxasp.com:9143/image/2341",
            "addr":"Beijing"
        },
        "Beth":{
            "phone":"1234",
            "addr":"Shanghai"
        },
        "Cecil":{
            "phone":"5678",
            "addr":"Guangzhou"
        }
    }
    
    labels ={
        "phone":"Phone number",
        "addr":"Address"
    }
    
    name = input("Name:")
    
    request = input("Phone number(p) or address(a):")
    
    if request == "p": key = "phone"
    if request == "a": key = "addr"
    
    if name in people:
        print("%s's %s is %s." % (name,labels[key],people[name][key]))
    
      8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    1. 字典的格式化字符串
      在每个转换说明符中的 % 字符后面,可以加上键(用圆括号括起来的),后面再跟上其他说明元素
      在这里插入图片描述
    2. get 方法:当使用get 访问一个不存在的键时,不会出现异常,会得到None,也可以自己定义 默认值,替换None
      在这里插入图片描述
      使用 get方法的简单数据库
    people = {
        'Alice':{
            "phone":"https://cdn.jxasp.com:9143/image/2341",
            "addr":"Beijing"
        },
        "Beth":{
            "phone":"1234",
            "addr":"Shanghai"
        },
        "Cecil":{
            "phone":"5678",
            "addr":"Guangzhou"
        }
    }
    
    labels ={
        "phone":"Phone number",
        "addr":"Address"
    }
    
    name = input("Name:")
    
    request = input("Phone number(p) or address(a):")
    
    if request == "p": key = "phone"
    if request == "a": key = "addr"
    # name 不存在,将person改为 空字典
    person =  people.get(name,{})
    label = labels.get(key,key)
    # 替换默认值 None
    result = person.get(key,"not available")
    print("%s's %s is %s." % (name,label,result))
    
      8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述

    1. 循环遍历字典元素
      在这里插入图片描述

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载