美文网首页我的Python自学之路
Python基础(15)-字典数据类型及其所具备的方法

Python基础(15)-字典数据类型及其所具备的方法

作者: 皓月的简书 | 来源:发表于2017-02-22 15:49 被阅读0次

    15.1-创建字典:

    第一种方式:

    说明:字典的键不仅仅可以是字符串,也可以是数字。

    >>> dic = {
    ...     "k1" : 11,
    ...     "k2" : 22,
    ...      3 : 33
    ... }
    >>> type(dic)
    <type 'dict'>
    

    第二种方式:

    >>> dic = dict({
    ...     "k1" : 11,
    ...     "k2" : 22,
    ...      3 : 33
    ... })
    >>> type(dic)
    <type 'dict'>
    
    def __init__(self, seq=None, **kwargs): # known special case of dict.__init__
            """
            dict() -> new empty dictionary
            dict(mapping) -> new dictionary initialized from a mapping object's
                (key, value) pairs
            dict(iterable) -> new dictionary initialized as if via:
                d = {}
                for k, v in iterable:
                    d[k] = v
            dict(**kwargs) -> new dictionary initialized with the name=value pairs
                in the keyword argument list.  For example:  dict(one=1, two=2)
            # (copied from class doc)
            """
            pass
    

    通过源码可以看出 dict 可以初始化一个映射对象的 (键,值)对,即创建一个与该映射对象具有相同键-值对的字典。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = dict(k1 = 11,k2 = 22)
    print(dic)
    

    运行结果:

    还可以接收一个可迭代对象,会将可迭代对象里的元素通过for循环一遍,将其元素当做字典的值,而键是默认没有的,所以可以通过 enumerate() 函数给它加一个序号,当做字典的键。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    li = [11,22,33,44]
    dic = dict(enumerate(li))
    print(dic)
    

    运行结果:


    15.2-索引

    说明:由于字典是无序的,所以字典是通过键来进行索引的,索引取值时,若是键不存在就会报错。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 索引
    print(dic["k2"])
    

    运行结果:



    注:字典是不能够进行切片的。

    15.3-for循环:

    默认循环:

    循环时默认循环的是 key

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 默认循环是 key
    for i in dic:
        print(i)
    

    运行结果:

    循环key:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 循环key,和默认循环相同
    for i in dic.keys():
        print(i)
    

    运行结果:


    注:和默认循环相同。

    循环value:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 循环 value
    for i in dic.values():
        print(i)
    

    运行结果:

    循环key-value:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 循环 键值对
    for k,v in dic.items():
        print(k,v)
    

    运行结果:

    15.4-字典(dict)内部方法介绍:

    clear(self):

    说明:删除字典中所有的元素。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    print(dic)
    
    # 清空字典
    dic.clear()
    print(dic)
    

    运行结果:

    copy(self):

    说明:浅拷贝。

    fromkeys(*args, **kwargs):

    说明:创建一个新的字典,第一个元素为可迭代的对象,将其中的元素作为字典的键,第二个元素为字典所有键对应的值。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = dict.fromkeys(["k1","k2","k3"],123456)
    print(dic)
    

    运行结果:

    简单深入的例子:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic1 = dict.fromkeys(["k1","k2","k3"],11)
    print(dic1)
    
    dic2 = {"k1":11,"k2":11,"k3":11}
    print(dic2)
    

    运行结果:


    注:默认生成一个字符串或者一个数字时,以上两个之间是没有区别的,但是如果生成的是一个列表或其它类型就有区别了。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic1 = dict.fromkeys(["k1","k2","k3"],[])
    print("dic1:",dic1)
    
    dic2 = {"k1":[],"k2":[],"k3":[]}
    print("dic2:",dic2)
    
    print("-----" * 8)
    
    # 在 空列表 里追加内容,通过 fromkeys 创建时,所有的键 共同对应着 同一个列表
    dic1["k1"].append("11")
    print("dic1",dic1)
    
    # 每一个列表各自占一个内存
    dic2["k1"].append("11")
    print("dic2",dic2)
    

    运行结果:

    get(self, k, d=None):

    说明:返回指定键的值, k 表示要指定的键, d 表示指定键不存在时返回的值,默认返回None。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 返回 "k2" 的值
    ret = dic.get("k2")
    print(ret)
    
    # 指定键不存在时,默认返回 None
    ret2 = dic.get("k4")
    print(ret2)
    
    # 指定键不存在时,设置返回值
    ret3 = dic.get("k4",0)
    print(ret3)
    

    运行结果:

    items(self):

    说明:将字典中的键值对组成元组,并放到列表中返回。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    ret = dic.items()
    print(ret)
    

    运行结果:

    keys(self):

    说明:返回一个包含字典中键的列表。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    ret = dic.keys()
    print(ret)
    

    运行结果:

    pop(self, k, d=None):

    说明:移除字典中指定键对应的值,并返回该键对应的值, k 表示指定的键, d 表示当键不存在又不想处理异常时填写即可。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 删除 "k2" 并返回 "k2" 对应的值
    ret = dic.pop("k2")
    print(ret)
    print(dic)
    
    # 当 "k4" 不存在时,输出 "0"
    ret2 = dic.pop("k4",0)
    print(ret2)
    

    运行结果:

    popitem(self):

    说明:随机删除字典中一对键和值,并返回该键值对。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 随即删除并返回
    print(dic.popitem())
    print(dic)
    

    运行结果:

    setdefault(self, k, d=None):

    说明:如果指定键不存在,则创建键,如果存在则返回该键对应的值, k 表示指定的键, d 表示指定键不存在时,设置的默认值,默认为None。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 指定键存在时,返回该键对应的值
    ret1 = dic.setdefault("k2")
    print(ret1)
    
    # 指定键不存在时,则创建该键,该键默认值为 None
    ret2 = dic.setdefault("k4")
    print(ret2)
    
    # 设置默认值
    ret3 = dic.setdefault("k5",55)
    print(ret3)
    print(dic)
    

    运行结果:

    update(self, E=None, **F):

    说明:更新,将一个字典中的键值对更新到另一个字典中,如果字典原有的键与新添加的键重复,则新添加的覆盖原有的, E 表示添加到指定字典中的字典。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic1 = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    dic2 = {
        "k3" : "v3v3",
        "k4" : 44,
        "k5" : 55
    }
    
    dic1.update(dic2)
    print(dic1)
    

    运行结果:

    values(self):

    说明:返回一个包含字典中值的列表。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    ret = dic.values()
    print(ret)
    

    运行结果:

    15.5-检查字典中指定key是否存在:

    可以通过 in 来查看指定 key 是否存在字典中,如果存在字典中返回 True ,否则返回 False

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 指定 键 存在字典中
    ret1 = "k2" in dic.keys()
    print(ret1)
    
    # 指定 键 不存在字典中
    ret2 = "k4" in dic.keys()
    print(ret2)
    

    运行结果:

    既然可以通过 in 来查看指定 key 是否存在字典中,那么也是可以通过 in 来查看指定 value 是否存在字典中的。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    
    # 指定 值 存在字典中
    ret1 = 33 in dic.values()
    print(ret1)
    
    # 指定 值 不存在字典中
    ret2 = 44 in dic.values()
    print(ret2)
    

    运行结果:

    15.6-删除字典指定键值对:

    通过 del 关键字删除字典中指定的键值对。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {
        "k1" : 11,
        "k2" : 22,
        "k3" : 33
    }
    print(dic)
    
    # 删除 "k1" 这个键值对
    del dic["k1"]
    print(dic)
    

    运行结果:

    15.7-enumerate()函数:

    说明: enumerate(iterable, start=0) 根据可迭代对象创建枚举对象,即同时返回索引和值, iterable 表示接受一个可迭代对象, start 表示指定索引的起始值,默认为0。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    li = ["手机","电脑","汽车用品","图书"]
    
    # 起始值从 1 开始,默认为 0
    for key,item in enumerate(li,1):
        print(key,item)
    
    choice = int(input("请选取商品:"))
    
    # 索引是从 0 开始的,只不过打印是从 1 开始的
    # 所以选 1 的时候打印的还是电脑,所以可以让输入的值 -1
    buy = li[choice-1]
    print(buy)
    

    运行结果:

    15.8-练习题:

    元素分类:

    要求:有如下值集合[11,22,33,44,55,66,77,88,99,90]将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。即: {'k1': 大于66的所有值, 'k2': 小于等于66的所有值}。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    l1 = [11,22,33,44,55,66,77,88,99,90]
    dic = {
        "k1" : [],
        "k2" : []
    }
    
    # 循环 l1 并对里面每一个元素进行判断
    for i in l1:
        if i > 66:
            dic["k1"].append(i)
        else:
            dic["k2"].append(i)
    print(dic)
    

    运行结果:

    通过for循环将列表转换成字典:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    li = [11,22,33,44]
    dic = {}
    
    # key 是从 10 开始递增的
    for k,v in enumerate(li,10):
        dic[k] = v
    print(dic)
    
    # dic = dict(enumerate(li,10))  # 上面的循环就是字典内部的本质,就是说这一句的本质就是上面的循环
    # print(dic)
    

    运行结果:

    查找列表中符合条件元素:

    要求:查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素。

        li = ["alec", " aric", "Alex", "Tony", "rain"]
        tu = ("alec", " aric", "Alex", "Tony", "rain") 
        dic = {'k1': "alex", 'k2': ' aric',  "k3": "Alex", "k4": "Tony"}
    

    注:以上三个任选其一即可。

    列表:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    li = ["alec", " aric", "Alex", "Tony", "rain","abcd"]
    for i in li:
        i = i.strip()
    
    #if 判断的顺序是从前到后的,如果第一个条件为 True 后面跟着 or 就表示自己成功就行了,就不会去判断后面的了
    # 前面加一个括号,将这个括号当成了一个整体
        if (i.startswith("a") or i.startswith("A")) and i.endswith("c"):
            print(i)
    

    运行结果:

    元组:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    li = ("alec", " aric", "Alex", "Tony", "rain","abcd")
    for i in li:
        i = i.strip()
        if (i.startswith("a") or i.startswith("A")) and i.endswith("c"):
            print(i)
    

    运行结果:

    字典:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    dic = {'k1': "alex", 'k2': ' aric',  "k3": "Alex", "k4": "Tony"}
    for i in dic.values():
        i = i.strip()
        if (i.startswith("a") or i.startswith("A")) and i.endswith("c"):
            print(i)
    

    运行结果:

    相关文章

      网友评论

        本文标题:Python基础(15)-字典数据类型及其所具备的方法

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