美文网首页
2018-08-28 day7 dict和set

2018-08-28 day7 dict和set

作者: rzlong | 来源:发表于2018-08-28 20:53 被阅读0次

    字典

    声明字典
    • 字典是容器类型,也是序列。以键值对作为元素(key-value)。
    • 键值对: key:value ,键必须唯一且不可改变(数值、布尔、字符串和元组);通常使用字符串;若定义了相同的key时,它会按照后一个出现的值为准;值可以不唯一,可以是任何类型的数据
    • 使用{ }表示
    • 字典是可变的(元素可变)
    dict1 = {'hero':'lucian', 2:'oneplus', True:'True',(10,20):'坐标(10,20)'}
    print(dict1)
    
    result:
    {'hero': 'lucian', 2: 'oneplus', True: 'True', (10, 20): '坐标(10,20)'}
    
    获取字典的元素对应的值
    • 字典存数据,实质存的value,key是获取value的手段
    • dict_name[key] -- 通过key获取值,若key不存在时返回KeyError
    print(dict_list['name'],dict_list['medicine'])
    
    result:
    shiting wang yuting
    
    • dict_name.get(key) -- 通过key获取值,若key不存在返回None,代表没有
    print(dict_list.get('a'))
    
    result:
    None
    

    :key肯定存在时用[],可能不存在或不希望返回错误时用get

    字典遍历
    • 遍历字典直接取到字典的key值
    for k in person:
        print(k,person[k])
    for k,v in person.items():
        print(k,v)
    
    result:
    name 某宝
    age 10
    boss 某云
    sex 男
    name 某宝
    age 10
    boss 某云
    sex 男
    
    修改元素
    • 语法 dict_name[key] = value
    person['sex'] = '女'
    print(person)
    
    增加元素
    • dict_name[new_key] = value
    del person['age']
    
    删除元素
    • del dict_name[key]
    a = person.pop('boss') #a保存的是删除key对应的value
    

    字典相关计算

    • 字典不支持 + 和 *
    • in 和 not in -- 判断key在字典中是否存在
    • len(dict_name) 获取字典中元素的数量
    • dict_name.clear() 删除字典中所有的元素
    • dict_name.copy() 复制字典中的键值对到新的字典,属于浅拷贝
    computer1 = computers #复制computers的地址给computer1
    computer2 = computers.copy() #复制computers的全部元素到一个新的内存空间中,并且将新的地址给computer2
    
    • copy.deepcopy(dict_name) 需先导入copy模块,属于深拷贝
    • dict.fromkeys(seq, Default = None) 将列表转换字典,将序列seq中每个值作为key,默认值为value创建一个新的字典.默认值不写时为None
    print(dict.fromkeys(computers,12))
    
    • 获取字典项
    # dict_name.keys() 获取字典中的所有key,返回dict_keys类型
    print(type(computers.keys()),computers.keys())
    # dict_name.values() 获取字典中所有key对应的value,返回dict_values类型
    print(type(computers.values()),computers.values())
    # dict_name.items() 获取字典所有的元,返回dict_items类型。
    print(type(computers.items()),computers.items())
    # 不推荐使用,遍历数据时会转换数据,占用更大的资源。
    
    result:
    <class 'dict_keys'> dict_keys(['brand', 'color'])
    <class 'dict_values'> dict_values(['联想', 'white'])
    <class 'dict_items'> dict_items([('brand', '联想'), ('color', 'white')])
    
    • dict_name.setdefault(key, Default=None) 给字典添加键值对,如果键值对存在,就不作处理
    computers.setdefault('value','nice')
    
    • dict1.update(dict2) 将字典2的键值对更新到字典1中,如果字典2的键值对在字典1中存在,就更新对应键的值
    dict1 = {'age':10,'name':'007'}
    dict2 = {'num':10,'name':'king'}
    print('before updating: ',dict1)
    dict1.update(dict2)
    
    result:
    {'brand': '联想', 'color': 'white', 'value': 'nice'}
    before updating:  {'age': 10, 'name': '007'}
    updated:  {'age': 10, 'name': 'king', 'num': 10}
    
    

    list和dict的组合

    • 数据保存多个数据的类型是同一种类型,使用列表
      保存多个学生的信息 students_info = [{}, {}, {}...]
    • 数据保存多个数据的类型不同,使用字典
      如保存
    student_info = [
        {'name':'lucian','age':10},
        {'name':'lax','age':12},
        {'name':'gaylun','age':14}
    ]
    
    py_class = {
        'class_name':'python1806',
        'students':student_info,
        'location':'2_classroom'
    }
    
    • 输入一名学生的姓名,根据姓名删除对应的学生
    name = input('输入姓名:')
    for item in py_class['students'][:]:
        if item['name'] == name:
            py_class['students'].remove(item)
            print('已删除' )
            print(py_class)
    

    集合set

    集合在python中是一种无序的可变且值唯一的容器类型

    • 声明集合
    set1 = {1,3,'a',(1,2),True}
    print(set1,type(set1))
    set2 = set('dongdongqiang')
    print(set2)
    
    # 将其他的序列转换成集合,自带一个去重的功能
    #定义空集合必须 set1 = set()
    result:
    {(1, 2), 1, 3, 'a'} <class 'set'>
    {'g', 'q', 'n', 'o', 'i', 'd', 'a'}
    
    • 集合不能单独获取其中的某一个元素的,只能通过遍历获取集合的元素
    for item in set1:
        print(item)
    
    result:
    (1, 2)
    1
    3
    a
    
    • 添加元素
      • set_name.add(obj)
      set1.remove('old')
      print(set1)
      
      result:
      {(1, 2), 1, 3, 'goods', 'a'}
      
      • set1.update(set2)
      set1.update({'new','old'})
      print(set1)
      
      result:
      {(1, 2), 1, 'new', 3, 'goods', 'old', 'a'}
      
    • 删除元素
      • set_name.remove(obj) 删除集合中指定的元素
      set1.remove('old')
      print(set1)
      
      result:
      {(1, 2), 1, 'new', 3, 'goods', 'a'}
      
      • set_name.clear() 删除整个集合的元素
      • del set_name 删除集合
    • 集合中不能修改元素
    • 数学相关运算
    # a.判断包含情况
    '''
    集合1 >= 集合2 判断集合2是集合1的子集
    集合1 <= 集合2 判断集合1是集合2的子集
    '''
    # b.求交并补
    '''
    并集:集合1 | 集合2 求两个集合的全部部分
    交集:集合1 & 交集2 求两个集合公共部分
    补集:集合1 ^ 集合2 求两个集合除公共部分以外的部分
    '''
    # c.差集
    '''
    集合1 - 集合2  集合1对于集合2没有的部分
    '''
    

    相关文章

      网友评论

          本文标题:2018-08-28 day7 dict和set

          本文链接:https://www.haomeiwen.com/subject/ntzqwftx.html