父与子的编程--字典
本章总结:
1创建字典
2添加条目
3查找(键的值、键的存在)
4列表和字典的异同
5排序(对键排序、对值排序)
6删除(删除某一个键、删除所有)
字典概念:Python 字典(dictionary)是一种将两个东西关联在一起的方式。被关联在一起的两个东西分别称为键(key)和值(value)。字典中的每个项(item)或条目(entry)都有一个键和一个值,它们合起来被称为键值对(key-value pair)。一个字典就是一些键值对的集合。
一、创建
1.创建一个空的字典:
>>> phoneNumbers = {}
2.来添加一个条目:
>>> phoneNumbers["John"] = "555-1234"
如果我们打印一下字典,它看起来是这样的:
>>> print phoneNumbers
{'John': '555-1234'}
显示键,然后是一个冒号,再接着显示值。之所以用引号,是因为在这个例子中键和值刚好都是字符串(不是必需的)。
另一种方式来完成:
>>> phoneNumbers = {"John": "555-1234"}
来添加更多的条目。不像在列表中可以使用append(),在字典中则没有用于添加新条目的方法。只需要指定新的键和值就行了:
>>> phoneNumbers["Mary"] = "555-6789"
>>> phoneNumbers["Bob"] = "444-4321"
>>> phoneNumbers["Jenny"] = "867-5309"
来看一下整个字典:
>>> print phoneNumbers
{'Bob': '444-4321', 'John': '555-1234', 'Mary': '555-6789', 'Jenny': '867-5309'}
3.查找
之所以创建字典,是因为我们可以在字典中查找东西。在这个例子中,我们希望按姓名来查找电话号码。你可以这样做:
>>> print phoneNumbers["Mary"]
'555-6789'
三、列表和字典的异同
字典和列表有点类似,但也有一些主要区别。这两种类型都称为“集合”(collection),也就是说,它们都是将其他类型条目集中在一起的组织方式。
相似点:
列表和字典都可以包含任意类型(甚至包括列表和字典)的条目,所以你可以有一个包含数字、字符串、对象甚至其他集合的集合。
列表和字典都提供了在集合中查找条目的方法。
不同点:
列表是有顺序的(ordered)。如果你按照某种顺序向列表中添加元素,这些元素就会保持这种顺序。你还可以对列表进行排序。字典是无序的(unordered)。如果你向字典中添加内容,然后打印出来,显示的顺序可能会跟添加的顺序不同。
列表中的元素是使用索引访问的,而字典中的条目是使用键来访问的:
>>> print myList[3]
'eggs'
>>> print myDictionary["John"]
'555-1234'
在Python 中很多东西都是对象,列表和字典也是。所以列表和字典都有一些使用点号表示法来使用的方法。
keys() 方法会列出字典中所有的键:
>>> phoneNumbers.keys()
['Bob', 'John', 'Mary', 'Jenny']
values() 方法会列出字典中所有的值:
>>> phoneNumbers.values()
['444-4321', '555-1234', '555-6789', '867-5309']
其他的语言也有与Python 字典类似的东西。它们通常被称为关联数组(associative array),因为它们将键和值关联在一起。你可能也会听说它们的另外一个名字—哈希表(hash table)。
字典中的值是可以使用字典的,而键的要求更为严格一些。早先我们谈论过可变类型(mutable)与不可变类型(immutable)。字典的键只可以使用不可变类型(布尔、整数、浮点数、字符串和元组)。你不能使用一个列表或者字典来当作键,因为它们是可变类型。
四、排序
字典是无序的。希望将字典中的内容按照某种顺序显示出来。虽然字典没有顺序,但可以对列表排序,所以当你拿到键的列表后,就可以对键进行排序,然后按照键的顺序显示字典内容。你可以使用sorted() 函数来对字典的键排序,像下面这样:
1.对key的排序
>>> for key in sorted(phoneNumbers.keys()):
print key, phoneNumbers[key]
Bob 444-4321
Jenny 867-5309
John 555-1234
Mary 555-6789
2.对value的排序
字典的查找过程是单向的,这意味着只能用键去查找值,而不能反过来。所以对值排序会有些困难。但这仍然是可以做到的,只是需要做更多的工作:
>>> for value in sorted(phoneNumbers.values()):
for key in phoneNumbers.keys():
if phoneNumbers[key] == value:
print key, phoneNumbers[key]
Bob 444-4321
John 555-1234
Mary 555-6789
Jenny 867-5309
首先取得排序之后的值的列表,然后针对列表中的每个值,循环遍历字典中的所有键,直到找到与该值关联的键。
五、删除
使用del删除一个条目:
>>> del phoneNumbers["John"]
>>> print phoneNumbers
{'Bob': '444-4321', 'Mary': '555-6789', 'Jenny': '867-5309'}
使用clear()删除所有条目(清空字典):
>>> phoneNumbers.clear()
>>> print phoneNumbers
{}
使用in确定某个键在字典中是否存在:
>>> phoneNumbers = {'Bob':'444-4321', 'Mary':'555-6789','Jenny':'867-5309'}
>>> "Bob" in phoneNumbers
True
>>> "Barb" in phoneNumbers
False