字典基础知识总结

字典

字典的基本介绍

  • 字典属于⼀种新的数据结构称为映射(mapping)
  • 字典的作⽤和列表类似,都是⽤来存储对象的容器
    列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
  • 在字典中每⼀个元素都有唯⼀的名字,通过这个唯⼀的名字可以找到指定的元素
  • 这个唯⼀的名字我们称之为key 通过key可以快速查询value 也可以称之为值
  • 字典我们也称之为键值对(key-value)结构
  • 每个字典中都可以有多个键值对,⽽每⼀个键值对我们称其为⼀项(item)
  • 创建⼀个有数据的字典 语法 {key:value}
  • 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple…)
  • 字典的键是不能重复的,如果出现重复的后⾯的会替换前⾯的
  • 字典是序列类型,但是是无序序列,所以没有分片和索引
  • 字典中的数据每个都有键值对组成,即kv对
    • key: 必须是可哈希的值,比如int,string,float,tuple, 但是,list,set,dict 不行
    • value: 任何值

字典的创建

方法一:
d = {}
print(d)

方法二:
d = dict()
print(d)

  • 创建有值的字典, 每一组数据用冒号隔开, 每一对键值对用逗号隔开
d = {"one":1, "two":2, "three":3}
print(d)

用dict创建有内容字典

d = dict({"one":1, "two":2, "three":3})
print(d)

利用关键字参数

d = dict(one=1, two=2, three=3)
print(d)

字典常见操作

成员检测, in, not in

# 成员检测检测的是key内容
d = {"one":1, "two":2, "three":3}

if 2 in d:
    print("value")
    
if "two" in d:
    print("key")
    
if ("two",2) in d:
    print("kv")

通用函数: len, max, min, dict

# 通用函数: len, max, min, dict
# str(字典): 返回字典的字符串格式
d = {"one":1, "two":2, "three":3}
print(str(d))

清空删除字典 clear,del

  • clear: 清空字典
  • del命令删除整个字典.
  • 注意:当删除一个不存在的键时,
# 注意:当删除一个不存在的键时,
dictionary =dict((('绮梦', '水瓶座'),('冷伊一','射手座'), ('香凝','双鱼座'), ('黛兰','双子座')))

if "香凝1" in dictionary:   # 如果存在

    del dictionary["香凝1"]    # 删除一个元素

print(dictionary)

遍历字典:keys(),values(),items

  • keys():返回字典的键组成的一个结构
k = d.keys()
print(type(k))
print(k)

- values: 同理,一个可迭代的结构
v = d.values()
print(type(v))
print(v)
  • items()方法
d = {'name':'葫芦娃','age':10,'sex':'男'}
for k,v in d.items():
    print(k,v)
  • items: 返回字典的键值对组成的元组格式
d = {"one":1, "two":2, "three":3}
i = d.items()
print(type(i))
print(i)

修改字典:pop(),update(),popitem()

  • pop(key[,default]) 根据key删除⾃定中的value。第⼆个参数可以指定⼀个默认值,当获取不到值的时候会返回默认值
site= {'a': 1, 'b': 2, 'c':3}#pop()方法删除并返回指定“键”的元素
pop=site.pop('nae',"字典没有此键值")#设置默认值防止因键值不存在出错
print(pop) # 输出 :字典没有此键值

site= {'a': 1, 'b': 2, 'c':3}#pop()方法删除并返回指定“键”的元素
pop=site.pop('a')
print(pop) # 输出 :1

print(site)
  • update()
    update() 将其他字典的key-value添加到当前的字典当中

  • popitem() 方法返回并删除字典中的最后一对键和值

#如果字典已经为空,却调用了此方法,就报出 KeyError 异常。
site= {'a': 1, 'b': 2, 'c':3}
pop=site.popitem()
print(pop)
print(site)
  • dictionary = dict(zip(list1,list2))#通过映射函数创建字典
  • zip()函数:用于将多个列表或元组对应位置的元素组合为元组,
    并返回包含这些内容的zip对象。如果想获取元组, 可以将zip对象使用
    tuple()函数转换为元组;如果想获取列表,则可以使用list()函数
    将其转换为列表。
name = ['绮梦','冷伊一','香凝']
# 作为键的列表

sign = ['水瓶座','射手座','双鱼座','双子座']
# 作为值的列表
#注意形成的字典键值一一对相应,最少的项为标准
dic = dict(zip(name,sign))
print(dic)
  • fromkeys():
    使用指定的序列作为键,使用一个值作为字典的所有的键的值
d = {"one":1, "two":2, "three":3}
# fromkeys: 使用指定的序列作为键,使用一个值作为字典的所有的键的值
l = ["eins", "zwei", "drei"]
# 注意fromkeys两个参数的类型
# 注意fromkeys的调用主体
d = dict.fromkeys(l, "hahahahahah")
print(d)

查找元素:get()

  • get(key[,default]) - 根据键来获取字典的值。第⼆个参数可以指定⼀个默认值,当获取不到值的时候会返回默认值字典简介
    好处是,可以设置默认值
d = {"one":1, "two":2, "three":3}
print(d.get("on333"))

# get默认值是None,可以设置
print(d.get("one", 100))
print(d.get("one333", 100))

#体会以下代码跟上面代码的区别
print(d['on333'])#结果报错:KeyError: 'on333'

浅复制和深复制:copy(),deepcopy()

  • copy() ⽅法⽤来对字典进⾏潜复制注意:潜复制只会复制字典本身,如果字典中还有个字典是不会进⾏复制的
d = [1,2,3,[4,5,6]]
d2 = d.copy()
d[0] = 10
print('d =',d,id(d))
print('d2 =',d2,id(d2))
d = [10, 2, 3] 94178520
d2 = [1, 2, 3] 94178600
d = [1,2,3,[4,5,6]]
d2 = d.copy()
d[3][0] = 88
print('d =',d,id(d))
print('d2 =',d2,id(d2))
结果:
d = [1, 2, 3, [88, 5, 6]] 91950456
d2 = [1, 2, 3, [88, 5, 6]] 91950536

深复制

import copy
d = {'a':{'name':'葫芦娃','age':10},'b':2,'c':3}
d2 = copy.deepcopy(d)
d2['a']['name'] = '黑猫警长'
结果:
d = {'a': {'name': '葫芦娃', 'age': 10}, 'b': 2, 'c': 3} 52783216
d2 = {'a': {'name': '黑猫警长', 'age': 10}, 'b': 2, 'c': 3} 52783696

字典推导式

字典生成式
1:

d = {"one":1, "two":2, "three":3}

# 常规字典生成式
dd = {k:v for k,v in d.items()}
print(dd)
# 加限制条件的字典生成式
dd = {k:v for k,v in d.items() if v % 2 == 0}
print(dd)

2:

import random     # 导入random标准库

randomdict = {i:random.randint(10,100) for i in range(1,5)}

print("生成的字典为:",randomdict)

3:

name = ['绮梦','冷伊一','香凝','黛兰']     # 作为键的列表

sign = ['水瓶','射手','双鱼','双子']       # 作为值的列表

dictionary = {i:j+'座' for i,j in zip(name,sign)}
# 使用列表推导式生成字典

print(dictionary)
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值