笨方法学习Python-习题40: 字典, 可爱的字典

接下来我要教你另外一种让你伤脑筋的容器型数据结构,因为一旦你学会这种容器,你将拥有超酷的能力。这是最有用的容器:字典(dictionary)。

Python 将这种数据类型叫做 “dict”,有的语言里它的名称是 “hash”。这两种名字我都会用到,不过这并不重要,重要的是它们和列表的区别。你看,针对列表你可以做这样的事情:

>>> things = ['a','b','c','d']
>>> print(things[1])
b
>>> things[1] = 'z'
>>> print(things[1])
z
>>> print(things)
['a', 'z', 'c', 'd']
>>> 
你可以使用数字作为列表的索引,也就是你可以通过数字找到列表中的元素。而  dict  所作的,是让你可以通过任何东西找到元素,不只是数字。是的,字典可以将一个物件和另外一个东西关联,不管它们的类型是什么,我们来看看:

>>> stuff = {'name':'Zed','age':36,'height':6*12+2}
>>> print(stuff['name'])
Zed
>>> print(stuff['age'])
36
>>> print(stuff['height'])
74
>>> stuff['city'] = "San Francisco"
>>> print(stuff['city'])
San Francisco
>>> 
你将看到除了通过数字以外,我们还可以用字符串来从字典中获取  stuff  ,我们还可以用字符串来往字典中添加元素。当然它支持的不只有字符串,我们还可以做这样的事情:

>>> stuff[1] = "Wow"
>>> stuff[2] = "Neato"
>>> print(stuff[1])
Wow
>>> print(stuff[2])
Neato
>>> print(stuff)
{'name': 'Zed', 'age': 36, 'height': 74, 'city': 'San Francisco', 1: 'Wow', 2: 'Neato'}
>>> 

在这里我使用了两个数字。其实我可以使用任何东西,不过这么说并不准确,不过你先这么理解就行了。

当然了,一个只能放东西进去的字典是没啥意思的,所以我们还要有删除物件的方法,也就是使用 del 这个关键字:

>>> del stuff['city']
>>> del stuff[1]
>>> del stuff[2]
>>> stuff
{'name': 'Zed', 'age': 36, 'height': 74}
>>> 

接下来我们要做一个练习,你必须非常仔细,我要求你将这个练习写下来,然后试着弄懂它做了些什么。这个练习很有趣,做完以后你可能会有豁然开朗的感觉。

cities = {'CA':'San Francisco','MI':'Detroit','FL':'Jacksonville'}

cities['NY'] = 'New York'
cities['OR'] = 'Portland'

def find_city(themap,state):
    if state in themap:
        return themap[state]
    else:
        return "Not found."

# ok pay attention!
cities['_find'] = find_city

while True:
    state = input("State?(ENTER to quit)> ")
    if not state:break
    
    # this line is the most important ever! study!
    city_found = cities['_find'](cities,state)
    print(city_found)

加分习题

  1. 在 Python 文档中找到 dictionary (又被称作 dicts, dict)的相关的内容,学着对 dict 做更多的操作。
  2. 找出一些 dict 无法做到的事情。例如比较重要的一个就是 dict 的内容是无序的,你可以检查一下看看是否真是这样。
  3. 试着把 for-loop 执行到 dict 上面,然后试着在 for-loop 中使用 dict 的 items() 函数,看看会有什么样的结果。

删除字典的元素:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

del dict['Name'] # 删除键 'Name'
dict.clear()     # 删除字典
del dict         # 删除字典

print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

字典键的特性:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

dict = {'name':'Mahua','Age':8,'name':'Tudou'}

print("dict['name']: ",dict["name"])

#输出结果为:
dict['name']: Tudou

2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行


字典内置函数和方法:

1.len(dict):计算字典元素个数,即键的总数

2.str(dict):输出字典,以可打印的字符串表示

3.type(variable):返回输入的变量类型,如果变量类型是字典就返回字典类型


python字典包含了以下内置方法:

1.radiansdict.clear():删除字典内所有元素

2.radiansdict.copy():返回一个字典的浅复制

3.radiansdict.fromkeys():创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

4.radiansdict.get(key,default=None):返回指定键的值,如果值不在字典中返回default值

5.key in dict:如果键在字典dict里返回true,否则返回false

6.radiansdict.items():以列表返回可遍历的(键, 值) 元组数组

7.radiansdict.keys():以列表返回一个字典所有的键

8.radiansdict.setdefault(key,default=None):和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

9.radiansdict.update(dict2):把字典dict2的键/值对更新到dict里

10.radiansdict.values():以列表返回字典中的所有值

11.pop(key[,default]):删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值。

12.popitem():随机返回并删除字典中的一对键和值(一般删除末尾对)。

你可能感兴趣的:(Python3)