• Python学习基础笔记八——字典


    字典:

    1)字典中的元素是通过键来存储的,而不是通过偏移来存取的。字典是唯一内置的映射类型(键映射到值的对象)

    2)是无序集合

    3)字典是作为散列表(支持快速检索的数据结构)(哈希计算)来实现的。Python采用最优化的散列算法来寻找键,因此搜索是很快速的。

    key对应的是不可变数据类型,和哈希数据类型,如bool、int、str、元组;

    value对应的则是任意数据类型。

    常见字典常量和操作:

    操作功能
    D = {}空字典
    D = {'spam': 2, 'eggs': 3}两项目字典
    D = {'food': {'ham': 1, 'egg': 2}}嵌套
    D = dict.fromkeys(['a', 'b'])其他构造技术
    D = dict(zip(keyslist, valslist))
    D = dict(name = 'Bob', age=42)
    D ['eggs']以键进行索引运算
    D['food']['ham']以键进行索引运算
    ‘eggs’ in D成员运算 键存在测试
    D.keys()方法,获取键
    D.values()方法获取值
    D.items()获取键+值
    D.copy()副本
    D.get(key, default)默认
    D.update(D2)合并
    D.pop(key)删除
    len(D)长度, 得到字典元素的个数
    D[key]=value新增、修改键、删除键
    del D[key]根据键删除条目
    list(D.keys())字典视图
    D1.keys() & D2.keys()
    Dictionary views
    D = {x: x*2 for x in range(10)}字典解析

    例1:打印键和值,不使用元组的方式:

    需要访问字典里的每个元素,遍历字典。

    1. people = {'name': 'Alex', 'age': 18, 'height': 175}
    2. for k, v in people.items():
    3. print(k, v)

    说明:items方法,返回的是一个类似列表一样的元素。其中每个元素就是键值对组成的元素。 

    有点类似:

    [('name',‘Alex’), ('age', 18), ('height', 175)]

    例2:字典的增删改查的方法:

    增:

    D[key]=value 添加、修改键的值;

    D.setdefault('weight, 100) 有键值就不做任何改变;

    删:

    D.pop('age') 删除age键,有返回值;pop方法会返回参数key对应的Value值。

    D.pop('age1', 'No keys') 设置错误提示信息

    D.popitem()  随机删除

    D.clear()  清空字典,另外还有一个重新赋值的方法,members变量指向的就是一个新的空字典对象。原来的字典对象呢?因为没有被引用,就会被Python解释器在合适的时候从内存中删除。垃圾回收。

    del D['name'] 删除元素,尽量使用pop,如果没有键,则会报错。

    改:

    D.update 合并(没有就加进来,有就覆盖)

    查:

    D.keys()

    D.values()

    D.items()

    D.get(keys, default): 第二个参数是错误信息提示;

    例3:将列表元素进行分类:

    1. L = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    2. D = {}
    3. L_greater_66 = []
    4. L_less_66 = []
    5. for i in L:
    6. if i == 66:
    7. continue
    8. elif i > 66:
    9. L_greater_66.append(i)
    10. else:
    11. L_less_66.append(i)
    12. D['k1'] = L_greater_66
    13. D['k2'] = L_less_66
    14. print(D)

    2022年12月7日:

    增加一道字典的题目,会用到lambda函数。

    1. portfolio = [
    2. {'name': 'IBM', 'shares': 100, 'price': 91.1},
    3. {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    4. {'name': 'FB', 'shares': 200, 'price': 21.09},
    5. {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    6. {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    7. {'name': 'ACME', 'shares': 75, 'price': 115.65}
    8. ]
    9. # 计算购买每支股票的总价
    10. ret = map(lambda dic: {dic['name']: round(dic['shares'] * dic['price'], 2)}, portfolio)
    11. print(list(ret))
    12. # 用filter过滤出,单价大于100的股票有哪些
    13. ret = filter(lambda dic: True if dic['price'] > 100 else False, portfolio)
    14. print(list(ret))
    15. ret = filter(lambda dic: dic['price'] > 100, portfolio)
    16. print(list(ret))
  • 相关阅读:
    关于 C/C++ 中的 switch 语句,您可能不知道
    面试题:Kafka中Controller的作用是什么?选举流程是怎样的?以及如何避免脑裂问题?
    EasyExcel实现动态列解析和存表
    LaTeX中的数学公式
    HOG特征学习笔记
    阿里云ACK(Serverless)安装APISIX网关及APISIX Ingress Controller
    STM32使用寄存器开发底层驱动学习(USART+DMA)
    RabbitMQ常见问题及其解决方案
    4-3:点赞功能
    Win11如何获得最佳电源效率?
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/127940573