zoukankan      html  css  js  c++  java
  • (python)数据结构---字典

    一、描述

    • 由键值key-value组成的数据的集合
    • 可变无序的key不可以重复
    • 字典的键key要可hash(列表、字典、集合不可哈希),不可变的数据结构是可哈希的(字符串、元组、对象、bytes)
    • 字典的值value可以是任意的数据类型

    二、字典的相关操作

    1、访问字典的值value

    • 字典可以通过key去访问对应的值
    • key不存在抛出KeyError异常
    1 d = {"name": "wj", "age": 22}
    2 print(d["name"])

    运行结果如下:
    wj

    2、dict.get(key[, default])

    • 返回key对应的值value
    • key不存在返回缺省值default,如果没有设置缺省值就返回None
    1 d = {"name": "wj", "age": 22}
    2 print(d.get("name"))

    运行结果如下:
    wj

    3、dict.setdefault(key[, default])

    • 返回key对应的值value
    • key不存在就创建这对kv对,value是default值,如果没有设置default值,缺省为None
    1 d = {"name": "wj", "age": 22}
    2 print(d.setdefault("gender", "F"))
    3 print(d)

    运行结果如下:
    F
    {'name': 'wj', 'age': 22, 'gender': 'F'}

    4、通过key去增加或者修改值

    • 如果key存在就修改值,如果key不存在就增加该键值对
    1 d = {"name": "wj", "age": 22}
    2 d["name"] = "yzw"
    3 print(d)
    4 d["gender"] = "F"
    5 print(d)

    运行结果如下:
    {'name': 'yzw', 'age': 22}
    {'name': 'yzw', 'gender': 'F', 'age': 22}

    5、dict.update([other])

    • 使用另外一个字典的kv对更新本字典
    • 如果key存在,就更新,不存在,就增加
    1 d = {"name": "wj", "age": 22}
    2 d.update(name="yaw")
    3 d.update((("gender", "F"), ))
    4 d.update({"birthday": "8-7"})
    5 print(d)

    运行结果如下:
    {'gender': 'F', 'name': 'yaw', 'birthday': '8-7', 'age': 22}

    6、dict.pop(key[, default])

    • key存在,移除它,并返回它的值value
    • 可以不存在,返回默认值defalut,没有设置defalut,抛出异常KeyError
    1 d = {"name": "wj", "age": 22}
    2 d.pop("name")
    3 print(d)

    运行结果如下:
    {'age': 22}

    7、dict.popitem()

    • 移除并返回一个任意的键值对
    • 如果字典为空,抛异常KeyError
    1 d = {"name": "wj", "age": 22}
    2 d.popitem()
    3 print(d)

    运行结果如下:
    {'name': 'wj'}

    8、dict.clear()

    • 清空字典

    9、字典的删除

    • 通过del语句直接删除字典或者删除指定的key
    1 d = {"name": "wj", "age": 22}
    2 del d["name"]
    3 print(d)
    4 del d
    5 # print(d)  NameError: name 'd' is not defined

    运行结果如下:
    {'age': 22}

    10、字典遍历

    • 遍历key
    1 d = {"name": "wj", "age": 22}
    2 for k in d:
    3     print(k)
    1 d = {"name": "wj", "age": 22}
    2 for k in d.keys():
    3     print(k)
    • 遍历value
    1 d = {"name": "wj", "age": 22}
    2 for k in d:
    3     print(d[k])
    1 d = {"name": "wj", "age": 22}
    2 for k in d:
    3     print(d.get(k))
    1 d = {"name": "wj", "age": 22}
    2 for k in d.values():
    3     print(k)
    • 遍历item,键值对
    1 d = {"name": "wj", "age": 22}
    2 for k, v in d.items():
    3     print(k, v)

    11、字典遍历和移除

    • 注意,字典在遍历的时候是不能够移除其元素的,否则抛异常RuntimeError
    • 如果想要在遍历的时候移除元素,可以在遍历的时候将key加入到一个列表中,然后遍历这个列表,来移除key
    1 d = {"name": "wj", "age": 22}
    2 keys = []
    3 for k, v in d.items():
    4     keys.append(k)
    5 
    6 for k in keys:
    7     d.pop(k)
    8 
    9 print(d)

    运行结果如下:
    {}

    12、工厂函数defaultdict

    • 当key不存在的时候,会调用这个工厂函数来生成key对应的值value
    1 from collections import defaultdict
    2 import random
    3 
    4 d = defaultdict(list)
    5 for k in "abcde":
    6     for i in range(random.randint(1, 5)):
    7         d[k].append(i)
    8 
    9 print(d)

    运行结果如下:
    defaultdict(<class 'list'>, {'d': [0, 1, 2, 3], 'a': [0], 'c': [0, 1, 2, 3, 4], 'b': [0, 1, 2, 3, 4], 'e': [0, 1, 2, 3, 4]})

    13、有序字典OrderedDict

    • 有序字典会记录元素插入的顺序,打印的时候也是按照这个顺序打印的
    • 比如:有的时候需要取出ID,希望是按照输入时的顺序取出,因为输入时的顺序是有序的,这种情况可以使用有序字典
    1 d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
    2 print(d)
    3 from collections import OrderedDict
    4 od = OrderedDict()
    5 for k, v in d.items():
    6     od[k] = d[k]
    7 print(od)

    运行结果如下:
    {'pear': 1, 'orange': 2, 'banana': 3, 'apple': 4}
    OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
  • 相关阅读:
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    ThinkPad 安装 Ubuntu 18.10 系统 -- 高分屏各项配置与Nvdia独显驱动
  • 原文地址:https://www.cnblogs.com/Sweltering/p/9894336.html
Copyright © 2011-2022 走看看