鱼C论坛

 找回密码
 立即注册
查看: 1605|回复: 0

[技术交流] 《零基础学习Python》26字典:当索引不好用时2

[复制链接]
发表于 2017-9-3 19:59:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 只为 于 2017-9-3 20:02 编辑

1、dict()  工厂函数(类型)
调用它会生成该类型的一个实例,就像工厂一样,所以称为工程类型
工厂函数还有:str(),int(),list(),tuple()


2、字典的内建方法:
1)创建字典:fromkeys()
|  fromkeys(iterable, value=None, /) from builtins.type
|      Returns a new dict with keys from iterable and values equal to value.
  1. # create
  2. dict1 = {}
  3. print(dict1.fromkeys('1'))  # {'1': None}
  4. print(dict1.fromkeys(('1', 38)))  # {'1': None, 38: None}
  5. print(dict1.fromkeys(('1', '2'), 'Number'))  # {'1': 'Number', '2': 'Number'}
  6. print(dict1.fromkeys(('1', '2'), ('one', 'two', 'three')))
  7. # {'1': ('one', 'two', 'three'), '2': ('one', 'two', 'three')}
复制代码

注:fromkeys()返回的是一个新的dict,跟原来的没有关系的,上面打印出来的都是匿名的dict,原来的dict1值不变

2) 访问字典的方法:keys(),values(),items()
  1. # read
  2. print(dict1)  # {}
  3. dict1 = dict1.fromkeys(range(4), 'zan')
  4. print(dict1)  # {0: 'zan', 1: 'zan', 2: 'zan', 3: 'zan'}
  5. for eachKey in dict1.keys():
  6.     print(eachKey)  # 0 1 2 3
  7. for eachValue in dict1.values():
  8.     print(eachValue)  # zan zan zan zan
  9. for eachItem in dict1.items():
  10.     print(eachItem)  # (0, 'zan')(1, 'zan')(2, 'zan')(3, 'zan')
复制代码

3) get() 当不存在key时,可以返回指定的值
  1. print(dict1.get(5))  # None
  2. print(dict1.get(5, '木有'))  # 木有
复制代码

4)在字典中检查键的成员资格比序列更加高效,当数据规模相当大的时候,两者的差距会很明显
  1. # in not in
  2. print(2 in dict1)  # True
  3. print(5 in dict1)  # False
  4. print('zan' in dict1)  # False
  5. print('zan' in dict1.values())  # True
复制代码


5)clear():清空字典
  1. # clear()
  2. dict1.clear()
  3. print(dict1)  # {}
  4. dict1 = {}  # 这样情况字典不严谨,不建议这样做(做不到真正的清空), 如下
  5. a = {'小甲鱼': 'name'}
  6. b = a
  7. a = {}
  8. print('a=', a, 'b=', b)  # a= {} b= {'小甲鱼': 'name'}
  9. a = {'小甲鱼': 'name'}
  10. b = a
  11. a.clear()
  12. print('a=', a, 'b=', b)  # a= {} b= {}
复制代码

6)copy(): 浅拷贝
  1. # copy()
  2. a = {1: 'one', 2: 'two', 3: 'three'}
  3. b = a.copy()
  4. c = a
  5. print('a=', a)  # c= {1: 'one', 2: 'two', 3: 'three'}
  6. print('b=', b)  # c= {1: 'one', 2: 'two', 3: 'three'}
  7. print('c=', c)  # c= {1: 'one', 2: 'two', 3: 'three'}
  8. print(id(a))  # 12007880
  9. print(id(b))  # 12007944
  10. print(id(c))  # 12007880
  11. c[4] = 'four'
  12. print('a=', a)  # a= {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
  13. print('b=', b)  # b= {1: 'one', 2: 'two', 3: 'three'}
  14. print('c=', c)  # c= {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
复制代码

注:赋值不等于浅拷贝,赋值后的地址不变(指向不变),浅拷贝后的地址是不一样的,只是对对象表层的一个拷贝
7)pop()
  1. # pop
  2. print(a.pop(1))  # one
  3. print(a)  # {2: 'two', 3: 'three', 4: 'four'}
  4. print  # (a.popitem())(2, 'two') 随机返回一个item并删除
  5. print(a)  # {3: 'three', 4: 'four'}
复制代码

8)setdefault()
  1. # setdefault()
  2. a.setdefault("小白")
  3. print(a)  # {'小白': None, 2: 'two', 3: 'three', 4: 'four'}
  4. a.setdefault(5, 'five')
  5. print(a)  # {'小白': None, 2: 'two', 3: 'three', 4: 'four', 5: 'five'}
复制代码

注:如果已经存在key,再setdefaullt,原dict不变
9)update():利用一个字典或映射关系去更新另一个字典
  1. # update()
  2. b = {'小白': '狗'}
  3. a.update(b)
  4. print(a)  # {'小白': '狗', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 10:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表