python源码中的学习笔记_第5章_字典

字典基础

#
# 主题:字典基础
#

if __name__ == '__main__':
    # 字典是一种 python 数据结构
    # 字典以键值对(key: value)的方式存储数据,字典是一个无序的序列(排列有前后顺序)
    # 列表是无序序列,排列无先后顺序
    # 相当于 JavaScript 中的对象
    # 字典通过 hash 函数和键值对中的键,计算出存储位置,之后才能找到对应的值
    # 键值对的键时不可变序列(不能进行增删改查),如字符串、整数等
    # 字典和列表都是可变序列,都可以进行增删改查

创建字典

#
# 主题:创建字典
#

if __name__ == '__main__':
    # 使用花括号
    scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}
    print(scores)               # {'Bob': 100, 'Jenny': 90, 'Danny': 80}
    print(type(scores))         # <class 'dict'>

    # 使用内置函数 dict
    student = dict(name = 'Liming', age = 20)
    print(student)              # {'name': 'Liming', 'age': 20}

    # 空字典
    d = {}

获取字典的元素

#
# 主题:获取字典的元素
#

if __name__ == '__main__':
    scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}

    # 使用 []
    print(scores['Danny'])          # 80
                                    # 若键在原字典中不存在,则报错 KeyError,既无法找到对应的键

    # 使用 get 方法
    print(scores.get('Danny'))      # 80
                                    # 若键在原字典中不存在,则 get 方法返回默认值 None
    print(scores.get('我', 0))      # 0
                                    # 若键在原字典中不存在,则可以返回自定义返回值

字典元素的增删改

#
# 主题:字典元素的增删改
#

if __name__ == '__main__':
    scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}

    # 判断键是否存在于原字典中
    print('我' in scores)            # False
    print('我' not in scores)        # True

    # 删除字典元素
    del scores['Danny']
    print(scores)                   # {'Bob': 100, 'Jenny': 90}

    scores.clear()                  # 清空字典
    print(scores)                   # {} 即空字典

    # 添加字典元素
    scores['我'] = 100
    print(scores)                   # {'我': 100}
    scores['me'] = 99
    print(scores)                   # {'我': 100, 'me': 99}

    # 改写字典元素
    scores['我'] = 98
    print(scores)                   # {'我': 98, 'me': 99}

获取字典视图

#
# 主题:获取字典视图
#

if __name__ == '__main__':
    scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}

    # keys 方法获取字典中所有的 key
    keys = scores.keys()
    print(keys)                 # dict_keys(['Bob', 'Jenny', 'Danny'])
    print(type(keys))           # <class 'dict_keys'>
    print(list(keys))           # ['Bob', 'Jenny', 'Danny']
                                # 将所有 key 组成的视图转换为列表

    # values 方法获取字典中所有 value
    values = scores.values()
    print(values)               # dict_values([100, 90, 80])
    print(type(values))         # <class 'dict_values'>
    print(list(values))         # [100, 90, 80]

    # items 方法获取字典中所有 key: value 对
    # 下面的输出结果中的小括号是元组
    items = scores.items()
    print(items)                # dict_items([('Bob', 100), ('Jenny', 90), ('Danny', 80)])
    print(type(items))          # <class 'dict_items'>
    print(list(items))          # [('Bob', 100), ('Jenny', 90), ('Danny', 80)]

遍历字典元素

#
# 主题:遍历字典元素
#

if __name__ == '__main__':
    scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}

    for item in scores:
        print(item, scores[item], scores.get(item))     # 第一个参数控制输出键
                                                        # 第二、三个参数控制输出值
    

字典的特点

#
# 主题:字典的特点
#

if __name__ == '__main__':
    d = {'name': 'Danny', 'name': 'Jenny'} # 当有相同的键时,后出现的键值对会覆盖掉前面的键值对
    print(d)                # {'name': 'Jenny'}

    d = {'name': 'Smith', 'nikename': 'Smith'}  # value 可以重复
    print(d)                # {'name': 'Smith', 'nikename': 'Smith'}

    # 字典中的元素是无序的,所以无法在自定义位置处添加元素
    # 键必须是不可变对象(字符串、整数),列表不能作为键(因为列表是可变对象,无法计算哈希值)
    # 字典的存储空间可以根据需要动态地伸缩
    # 字典会浪费较大内存,是一种使用空间换时间的数据结构
    # 字典中第一个填入的数据不一定在字典的首位,因为需要根据数据的键计算哈希值,从而得到存储地址
    # 字典的存储位置与存入的先后顺序无关,而与键有关

字典生成式

#
# 主题:字典生成式
#

if __name__ == '__main__':
    items = ['Fruits', 'Books', 'Others']
    prices = [96, 78, 85]
    d = {item.upper(): price for item, price in zip(items, prices)} # upper 方法是大写
    print(d)                # {'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 85}
    # 若 items 或 prices 中元素个数不相等,则以元素个数少的那个为准建立字典
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值