五、字典

字典(dict)

特性

  • 以多占存储空间换读取速度
  • 存储大量的关联型的数据,查询速度非常快

数据类型的分类

  • 可变(不可哈希)的数据类型:list dict set
  • 不可变(可哈希)的数据类型:int str bool tuple

创建

语法:{key1:value, key2:value}(以键值对的形式存储关联型内容,键名指向对应值)

  • key:键名必须唯一,必须是不可变的数据类型:int str(其他不常用)

  • value:任意值,任意的数据类型及对象

例:以三种方式创建字典 {'one': 1, 'two': 2}

d1 = dict((('one', 1), ('two', 2)))
d3 = dict({'one': 1, 'two': 2})
d2 = dict(one=1, two=2)

增删改查

  • 直接增加:dict[key] = value (增加键与值,存在重复键则改值)
  • 设置默认值:dict.setdefault(key,value)(有键则不变,无则加)
  • 追加字典:dict.update(字典)(可追加多个键值对)

  • 按键名删:dict.pop(key, 参数) (可返回删除值,无此键会报错,设置参数则返回参数,参数可自定义)

  • 删除键:del dict[key](无此键会报错,不建议)

  • 清空:dict.clear()


dict[key] = value(有此键则改动,无此键则增加)


  • 获取键的值:dict.get(key, 参数) (无此键返回None,设置参数则返回参数,返回参数可自定义)

  • 以键去查询:dict[key](没有则报错,不建议)


循环注意:循环字典时不可以改变它本身的大小,强制报错

# 转特殊格式再转列表,循环主体为列表改变字典
for key in list(dic.keys()):
    
# 循环放入新列表再循环新列表改变字典
l = []
for i in dic:
    if 'k' in i:
        l.append(i)
for key in l:
    
# 置换法:将满足的条件放入新字典
d = {}
for i in dic:
    if 'k' not in i:
        d[i] = dic[i]
        dic = d

特殊格式

  • 获取字典的键:dict.keys()
  • 获取字典的值:dict.values()
  • 获取字典的键值对:dict.items()
d = {'a1': 1, 'a2': 2}
d.keys()	# dict_keys(['a1', 'a2''])

使用方法

  • 转换列表:list(d.keys)(将所有键名转化为一个列表)
  • for循环:for i in d.keys():print(i)(循环输出键名)

拆包

定义多个变量对应同等数量的元素

a,b = 1,2
print(a, b)				# 1 2
a,b = ('你好', '世界')
print(a, b)				# 你好 世界

嵌套

列表的索引为键名数字,字典的索引为键名

dic = {'name':[2, {'age:18'}]}
dic['children'][1]['age']			# 18

fromkeys()

创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的值

语法:dict.fromkeys(seq, value)

  • seq:字典的键序列
  • value:设置键序列对应的值,默认为 None,可指定值
seq = ('a1', 'a2', 'a3')
d = d.fromkeys(seq)
print(d)     # {'a1': None, 'a2': None, 'a3': None}

d = d.fromkeys(seq, 66)
print(d)     # {'a1': 66, 'a2': 66, 'a3': 66}

d = d.fromkeys(seq, [1,2])
print(d)	 # {'a1': [1, 2], 'a2': [1, 2], 'a3': [1, 2]}
d['a2'].append(3)
print(d)	# {'a1': [1, 2, 3], 'a2': [1, 2, 3], 'a3': [1, 2, 3]}

posted @ 2020-03-21 18:17  今夜星河漫漫  阅读(147)  评论(0编辑  收藏  举报