字典与哈希表(HashMap)的本质以及解释 + 算法&计算机基础好书推荐

申明:本文内容基于书《Fundmentals of Python - Kenneth A. Lambert》(Figure. 1)

&《Grokking Algorithms - Aditya Y.Bhargava》(Figure. 2)

Tip:书1非常适合对Python感兴趣但是不是特别了解的初学者学习

书2适合对Python已经有一定掌握的同学

这本书可以帮助掌握很多的先进的 有用的算法例如广度优先 二分查找 快速排序等。

Figure. 1 Figure. 2


想象一下你是一家便利店的售货员 你的便利店里有很多的商品

商品的价格都写在了一本本子上 例如

牛奶...1.99$

鸡蛋...2.49$(I don't know why it's so expensive)

现在东西只有两样 你一眼就看到了这个商品的价格

但是当东西越来越多之后 你发现很难记住每一个商品的价格

图右来自 《Grokking Algorithms》

为此 你雇了一个专门帮你记录商品价格的记账员 Let's just call them Lucas

每当你在查找一个商品的价格时 Lucas就可以把这个商品的价格立马告诉你

于是 你查找商品的价格从O(n)降到了O(1)

在这里

Lucas的作用就像一个函数f(x) 当你把 x 作为商品的名称例如 “牛奶”

输入f(x)后 函数返回的是一个对应商品名称的数字价格

 图来自 《Grokking Algorithms》

巧了 这就刚好符合字典的写法 在字典中 需要指定字典中的Key所对应的Value

 当你输入字典中的Key值之后 字典会返回一个key值所对应的Value

<a dictionary>[<a key>] = <a value>
priceBooklet = {} #字典用大括号表示
priceBooklet["Avocado"] = 4 #这里意味着 Avocado 的价格为4

>>> print(priceBooklet)
>>> {"Avocado":4}

于是 我们就可以通过编写一个 包含很多商品价格的booklet去完成记账本

priceBooklet={"Apple":5,"Egg":2,"Avocado":3,"Banana":4,"Apple":3}
>>>print(priceBooklet["Apple"])
>>>3                           #当Key值重叠时 Value会指向后面那个赋值的量

下面是一些常见的字典操作 图来自 《Fundmentals of Python》 d={}

priceBooklet={"Apple":5,"Egg":2,"Avocado":3,"Banana":4,"Apple":3}
print(priceBooklet["Apple"])
>>>3

print(len(priceBooklet))
>>>4

priceBooklet["Tomato"] = 1.3#加入Tomato为1.3
print(priceBooklet.get("Mike"))
>>>None #如果有这个值 则返回Key对应的Value 否则 返回None

print(priceBooklet.pop("Apple"))
>>>3 #删除这个Key并且返回这个Key对应的Value 如果这个值不在 报错

print(list(priceBooklet.keys()))
>>>['Egg', 'Avocado', 'Banana', 'Tomato']

print(list(priceBooklet.values()))
>>>[2, 3, 4, 1.3]

print(priceBooklet.items())
>>>dict_items([('Egg', 2), ('Avocado', 3), ('Banana', 4), ('Tomato', 1.3)])

priceBooklet.clear()
print(priceBooklet)
>>>{}

Key值和Value值可以为任何值 字符串 字母 整数 浮点数 列表 链表等

 利用字典储存列表和链表是一种非常高效的储存信息的方式 广度优先查找就使用了这种方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值