zoukankan      html  css  js  c++  java
  • 第四章 数据类型—字典(dict)、集合(set)

    字典

    • dict 用{ } 来表示 键值对数据 {key:value} 具有唯一性

    • 键 key: 都必须是哈希的, 不可变的数据类型才可以做字典中的键

    • 值 value: 没有任何的限制,任何数据类型都可以

    • 字典本身是无序的(不可以切片),但是3.6版本添加了有序

    #字典的键key可以是什么,  值value(任何类型都可以)
    dic={"name":"alex","age":9000}  # 键可为字符串
    print(dic)
    dic={1:"a",2:"b",3:"c"}     # 键可为数字
    print(dic)
    dic={True:"1",False:"0"}    # 键可为bool
    print(dic)
    dic={(1,2,3):"ahd"}    # 键可为tuple 元组
    print(dic)
    
    dic={[1,2,3]:"abhd"}   # 键不可为列表  ****  集合也不可用做键
    print(dic)

    字典的增删改查

    补充:dic[key]=value 索引键key可用来 添加删除修改查看

    一、增加

    • dic[key]=value # 直接索引 键key 赋value值 更改

    • dic.setdefault(key,value) # 如果key在字典中存在,不进行操作,否则添加

                                        # 也可以通过key查询,没有则返回None

    dic = {"易大师": "剑圣", "剑豪": "托儿所", "草丛伦": "大宝剑"}
    dic[
    "诺手"] = "人头狗" # 新增 结尾处 如果key在字典中存在,就修改value值,不存在就在结尾处添加 print(dic)
    dic.setdefault(
    "火女", "安妮") # 新增 结尾处 中间用逗号隔开 dic.setdefault("火女", "火男") # 如果key在字典中存在不进行任何操作,不存在就进行添加 print(dic)

    二、删除

    • dic.pop(key) # 通过指定key删除字典中的内容,可返回被删除的Value值

    • del dic[key] # 通过键来删除 不放key 则删除整个字典

    • dic.clear( ) # 清空字典

    • dic.popitem( ) # 随机删除, 在3.6版本中默认删除最后一个

                            # 也有返回值 返回的是元组 ( key,value )

    • 字典的删除没有 remove( )

    dic={"易大师":"剑圣","剑豪":"托儿所","草丛伦":"大宝剑"}
     ​
     ret=dic.pop("易大师")  # 通过指定key删除字典中内容,返回的是value值
     print(ret)  # 接收到的删除的内容是value
     print(dic)
     ​
     del dic["易大师"]  # 通过键删除
     print(dic)
     ​
     dic.clear()  # 清空返回的是{} 空字典
     print(dic)
     ​
     ref=dic.popitem()   # 随机删除   但在3.6版本中默认删除最后一个
                               # 也有返回值 返回的是元组  ("key","value")
     print(dic)

    三、修改

    • dic[key]=value # 索引 键key 既可以用来修改也可以用来添加

    • dic.update(字典名) # 用新的字典去更新原字典

                                        替换时,若key值在原字典中存在,只修改value值,

                                       不存在,在结尾处添加

     dic={"易大师":"剑圣","剑豪":"托儿所","草丛伦":"大宝剑"}
     ​
     dic["剑豪"]="哈莎阁"  #   索引键key  来强制修改
     print(dic)
     ​
     dic1={"火女":"安妮","火男":"布兰德","剑豪":"暗影猎手"}
     dic.update(dic1)  #替换时,若key值在元字典中存在,则只修改value值,不存在的在结尾处添加
     print(dic)
     #输出:{'易大师': '剑圣', '剑豪': '暗影猎手', '草丛伦': '大宝剑', '火女': '安妮', '火男': '布兰德'}

    四、查

    • dic[key]  # 索引键key查看 不存在时会报错

    • dic.get(key)  # 查看时key不存在会返回None

    • dic.get(key,"自定义内容") # 查看时key不存在可返回自定义内容

    • dic.setdefault(key) # 即可查询,当有Value时,也可用于添加,key存在,无操作

    • for 循环 # 当 for i in dic 时,获取的是key

     dic = {"易大师": "剑圣", "剑豪": "托儿所", "草丛伦": "大宝剑"}
     ​
     # 查看的是value值
     print(dic["易大师"])  # 查看1   键不存在时 会报错
     print(dic.get("易大师"))  # 查看2   键不存在时 返回none  建议使用get
     print(dic.get("易大师父", "你傻啊,没有"))  # 不存在 也可返回自定义的"你傻啊,没有"
     print(dic.setdefault("易大师"))  # 查看3  也可用于查询  若赋值则可修改
    # for循环查看的是key
     for i in dic:
         print(i)  # 循环默认获取的是字典中的键

    字典的其他操作

    • keys

    • values

    • items
     dic={"易大师":"剑圣","剑豪":"托儿所","草丛伦":"大宝剑"}
     ​
     print(dic.keys())      # 获取的是高仿列表
     #输出:dict_keys(['易大师', '剑豪', '草丛伦'])
    print(dic.values())     # 获取的是高仿列表
     #输出:dict_values(['剑圣', '托儿所', '大宝剑'])
    print(dic.items())     #高仿列表  获取的是每一个元组
     #输出:dict_items([('易大师', '剑圣'), ('剑豪', '托儿所'), ('草丛伦', '大宝剑')])
    for i in dic:
         print(i)   #输出key
     for i in dic.keys():
         print(i)   #输出key
     for i in dic.values():
         print(i)   #输出value
     for i in dic.items():
         print(i)   #输出键值对,以元组( )的形式展现

    items()和iteritems()区别:

    一、两个函数的作用 字典的items方法作用:是可以将字典中的所有项,以列表方式返回。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的。 字典的iteritems方法作用:与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器。

    二、用例子说明问题

    (1)items()操作方法

    x = {'nan_ren': 'jiu_mo', "man": 'wbw'}
    a = x.items()
    
    print(x) # {'nan_ren': 'jiu_mo', 'man': 'wbw'}
    print(type(x)) # <class 'dict'>
    
    print(a) #  # dict_items([('nan_ren', 'jiu_mo'), ('man', 'wbw')])
    print(type(a)) # <class 'dict_items'>

    (2)iteritems()操作方法

    iteritems()方法在需要迭代结果的时候使用最适合,而且它的工作效率非常的高。

    总结:

    (1)在Python2.x中,iteritems() 用于返回本身字典列表操作后的迭代器【Returns an iterator on all items(key/value pairs) 】,不占用额外的内存。

    (2)在Python 3.x 里面,iteritems()方法已经废除了。在3.x里用 items()替换iteritems() ,可以用于 for 来循环遍历。

    解构(解包): 

    • 将后面的解构打开,按照位置赋值给变量,

    • 支持字符串列表元组

     a,b=(1,2)  #元组
     print(a)   # 1
     print(b)   # 2
     ​
     a,b=[1,2]  #列表
     print(a)  # 1
     print(b)  # 2
     ​
     a,b="12"  #字符串
     print(a)  # 1
     print(b)  # 2
     ​
     dic={"1":"2"}
     for a,b in dic.items():
         print(a)    #1
         print(b)    #2

    补充:

    • 批量创建key dic.formkeys()

     dic1={}
     ​
     dics=dic1.fromkeys([1,2,3])   #批量创建 key
     print(dics)
     #输出:{1: None, 2: None, 3: None}
     ​
     dics=dic1.fromkeys([1,2,3],"abc")
     print(dics)
     #输出:{1: 'abc', 2: 'abc', 3: 'abc'}

    字典的嵌套

    dic={"name":"jiumo",
         "age":18,
         "wife":{"name":"wbw",
                 "age":18,
                 "salary":100000
         },
         "baby":[
             {"name":"熊大","age":18},
             {"name":"熊二","age":15}
         ]
    }
    print(dic["baby"][0]["age"])    # 查找熊大的年龄
    print(dic.get("baby")[0].get("age"))   # 查找熊大的年龄
     ​
    dic["baby"][0]["age"]=19  # 将熊大的年龄改为1

    集合

    特点

    1. 元素是可哈希的即不可变的
    2. 无序的
    3. 不可重复的, 可以用于去重(重复的内容不打印)
    4. (存储的是字典里的key,不存储value)
    5. 集合本身是可变的数据类型, 不可哈希, 有增删改查的操作
    6. frozenset( )可以冻结集合,使集合 不可变, 可哈希
    s={'aa','hufh','koi'}  # set集合
    s1={'aa','hufh','koi',('1',2)} # 可含有tuple
    s2={'aa','hufh','koi',['1',2]}  # 错误的 含有list不可哈希 

    去重

    lst = [11,5,4,1,2,5,4,1,25,2,1,4,5,5]
    s = set(lst)    # 把列表转换成集合. 进行去重复
    lst = list(s)   # 把集合转换回列表.
    print(lst)

    冻结

    s=frozenset(['hh','ji','de'])
    dic={s:'123'}  # 集合s冻结后不可变,可以做字典的key
    print(dic)
    # {frozenset({'de', 'hh', 'ji'}): '123'}
  • 相关阅读:
    3.不同类型变量存取
    2.Scanner的应用
    helloworld
    针对搜狗网址导航评论
    第二阶段第三次站立会议
    第二阶段第二次站立会议
    软件工程概论学习进度条05
    人月神话阅读笔记02
    第二阶段第一次站立会议
    第八次站立会议
  • 原文地址:https://www.cnblogs.com/jiumo/p/9404142.html
Copyright © 2011-2022 走看看