申明:本文内容基于书《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值可以为任何值 字符串 字母 整数 浮点数 列表 链表等
利用字典储存列表和链表是一种非常高效的储存信息的方式 广度优先查找就使用了这种方法