Python-dict的使用

dict

原理:

在Python3中,dict是一种非常重要的数据结构,它用于存储键值对,提供了一种高效的查询方法。dict的底层实现采用了哈希表(hash table)的方式。

具体来说,Python3中的dict内部实现了一个哈希表,每个键值对被存储在一个叫做“bucket”的数据结构中。哈希表本质上是一个数组,每个数组元素是一个指向bucket的指针。当我们向dict中添加一个新的键值对时,Python会根据键的哈希值计算出该键值对应的bucket的位置,然后将该键值对添加到对应的bucket中。

为了解决哈希冲突的问题,Python3采用了开放寻址法(open addressing)来解决。具体来说,当两个键的哈希值相同时,Python会在哈希表中寻找下一个空闲的位置,并将键值对添加到该位置中。如果该位置已经被占用,则继续寻找下一个空闲的位置,直到找到一个空闲的位置为止。

为了提高查询效率,Python3的dict还维护了一个叫做“lookup”的缓存,用于缓存最近访问的键值对。当我们访问一个键值对时,如果该键值对已经在lookup缓存中,则可以直接返回结果,否则就需要遍历哈希表,查找对应的bucket。

需要注意的是,由于哈希表的大小是固定的,当哈希表中的元素数量达到一定阈值时,Python3会自动进行哈希表的扩容操作。这个操作会重新申请一块更大的内存空间,并将原有的键值对重新计算哈希值并存储到新的哈希表中。这样就能够保证dict的性能和稳定性,从而避免因为哈希表的限制而导致程序崩溃。

注意事项:

键值映射的数据类型 key-value
无序 -->没有下标,不能进行切片
可变数据类型
元素之间有关系适合用字典存储数据

字典的key --》天生去重1 这是因为对应的密文相同,
key 必须是可hash(哈希)对象 --》不可变数据类型
value 可以是任何值

字典的定义

在 Python 3 中,可以使用花括号 {}dict() 函数来定义字典。字典由键和对应的值组成,每个键值对之间用逗号分隔,键和值之间用冒号分隔。以下是两种常见的字典定义方式:

  1. 使用花括号 {} 定义字典
arduinoCopy code
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

2.使用 dict() 函数定义字典

pythonCopy code
my_dict = dict(key1='value1', key2='value2', key3='value3')

在以上两个示例中,my_dict 是一个包含三个键值对的字典,其中键为 key1key2key3,对应的值分别为 value1value2value3

d1 = {"name":"sctl","age":18}
print(d1["name"])
print(d1["age"])
print(d1["sdasd"])                  #keyError,在这里程序会退出,这里也是取值
print("end.......")

key可以是元组
d3 = {(1,2):"abc"}
print(d3)
print(1 in d3.keys())

字典的方法

字典(dictionary)是一种无序的数据结构,用于存储键值对。以下是 Python3 字典常用的方法:

  1. clear():清空字典中的所有元素。
  2. copy():返回一个字典的浅拷贝。
  3. get(key[, default]):返回字典中键 key 对应的值,如果键不存在,则返回默认值 default。
  4. items():返回一个包含所有 (键, 值) 元组的列表。
  5. keys():返回一个包含字典中所有键的列表。
  6. pop(key[, default]):删除并返回字典中键 key 对应的值,如果键不存在,则返回默认值 default。
  7. popitem():随机删除并返回字典中的一对键值对。
  8. setdefault(key[, default]):返回字典中键 key 对应的值,如果键不存在,则设置默认值 default,并返回该默认值。
  9. update([other]):用另一个字典或键值对序列更新当前字典。
  10. values():返回一个包含字典中所有值的列表。

以下是一个使用字典的示例:

# 创建一个字典
my_dict = {'apple': 2, 'banana': 3, 'orange': 5}

# 获取键 'apple' 的值
print(my_dict.get('apple'))

# 返回所有的键
print(my_dict.keys())

# 删除键 'banana'
my_dict.pop('banana')

# 更新字典
my_dict.update({'pear': 4, 'grape': 6})

# 返回所有的值
print(my_dict.values())

输出:

2
dict_keys(['apple', 'banana', 'orange'])
dict_values([2, 5])

字典的取值:

d4 = {"a":1,"b":2}
print(d4.get("x"))              ##使用get的取值,不会报错,返回none
print(d4.get("a"))
print(d4.get("sss",10))         ####使用get取值的时候,key不存在,就返回默认值,如果没有默认值就返回none
print(d4.get("b",20))  

字典的新增和修改

##key存在就是修改,不存在就是新增
d4["c"] = 3
print(d4.get("c"))
d4["a"]=30
print(d4.get("a"))

字典的遍历

d1 ={"a":1,"b":2,"c":3}
for i in d1:
    print(i)

#Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。

for i in d1.items():
    print(i)

for k,v in d1.items():              ##k取key,v取对于的值
    print(f"{k} -->{v}")

字典成员关系判断

d1 ={"a":1,"b":2,"c":3}		#True
print("a" in d1)			#False
print(1 in d1)              ##默认情况下,判断key
print(d1.values() )         ##查看所有值 -》 dict_values([1, 2, 3])
print(d1.keys())            ##查看所有key -》 dict_keys(['a', 'b', 'c'])
print(1 in d1.values())

字典的删除

#######删除
d1={'b':2,'a':1,'c':3}
##删除指定key的内容
d1.pop("a")
print(d1)

# 默认删除字典最后一个,会返回删除的值
print("返回值:",d1.popitem())
print(d1)

字典的合并

合并:
1.
d2={'d':4}
# 会改变d1的内容,将d2合并进去
d1.update(d2)
print("d1:",d1)

2.
####生成新字典合并
d3=dict(d1,**d2)
print("d3:",d3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈密猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值