字典是一组{}大括号括起来的键、值组合。

键(key)

值(value)

映射

  A  B

|---|     |---|

| a |-->| m |

| b |-->| n |

| c |-->| p |

| d |-->| q |

|---|     |---| 


创建和访问字典

>>> dict1 = { '李宁':'一切皆有可能','耐克':'Just do it','阿迪达斯':'Impossible is nothing','小伙子':'看好你哟'}                                                     #使用{}直接创建

>>> print('小伙子的口号是:',dict1['小伙子'])

小伙子的口号是: 看好你哟

>>> dict3 = dict((('Lilie',98),('Han×××',99),('Lucy',97),('Lily',99)))        #使用dict()函数键值对创建

>>> dict3

{'Lilie': 98, 'Han×××': 99, 'Lily': 99, 'Lucy': 97}

>>> print(dict3['Han×××'])                                                 #查找键值

99

>>> dict4 = dict(Python='牛逼的语言',php='最好的语言')                   #使用dict()函数赋值方式创建字典

>>> dict4

{'Python': '牛逼的语言', 'php': '最好的语言'}

>>> dict4['php']

'最好的语言'

>>> dict4['php'] = '最好的吗?呵呵'                           #修改值

>>> dict4

{'Python': '牛逼的语言', 'php': '最好的吗?呵呵'}

>>> dict4['C'] = '基础的基础'                                 #新增键值

>>> dict4

{'C': '基础的基础', 'Python': '牛逼的语言', 'php': '最好的吗?呵呵'}


------------------分割线,哈哈哈--------------------


课后作业:


0.当你听到小伙伴们在谈论“映射”、“哈希”、“散列”或者“关系数组”的时候,事实上他们就是在讨论什么呢?

全都是字典


1.尝试一下将数据('F':70,'C':67,'h':104,'i':105,'s':115)创建为一个字典并访问键‘C’对应的值。

dict5 = dict((('F',70),('C',67),('h',104),('i',105),('s',115)))

>>> dict5['C']

67

>>> print(dict5['C'])

67


2.用方括号‘[’括起来的数据我们叫列表,那么使用大括号‘{’括起来的数据我们就叫字典,对吗?

不对。用大括号括起来的数据如果没有映射关系则不是字典


3.你如何理解有些事情字典做得到,但是“万能的”列表却难以实现?

数据之间有关联关系,如姓名和分数,如果用列表得定义两个列表。使用姓名查找分数需要在两个列表中操作,效率低下。使用字典却方便很多


4.下边这些代码,他们都在执行一样的操作吗?你看得出差别吗?


>>> a = dict(one=1,two=2,three=3)

>>> b = {'one':1,'two':2,'three':3}

>>> c = dict(zip(['one','two','three'],[1,2,3]))

>>> d = dict([('two',2),('one',1),('three',3)])

>>> d = dict({'three':3,'one':1,'two':2})

一样的,都是创建字典{'one': 1, 'two': 2, 'three': 3}


5.如图,你可以推测出打了马赛克部分的代码吗?


data = "1000,小甲鱼,男"

MyDict = {}

(MyDict['id'],MyDict['name'],MyDict['sex']) = data.split(',')

print("ID:" + MyDict['id'])

print("Name:" + MyDict['name'])

print("Sex:" + MyDict['sex'])


分别把data里面的值分片赋给字典MyDict里面的键。data.split(',')


----------------------分割线,哈哈哈---------------------


动动手:


0.尝试利用字典的特性编写一个通讯录程序吧。

image.png

CONTACTORS = {}


def QUERY_CONTACTOR():

    NAME = input('请输入要查询的联系人姓名:')

    if NAME not in CONTACTORS:

        print('没有此用户!!!')

    else:

        print(NAME + ':' + CONTACTORS[NAME])


def NEW_CONTACTOR():

    NAME = input('请输入新增的联系人姓名:')

    while NAME in CONTACTORS:

        print('您输入的姓名在通讯录中已存在 -->>',end=' ')

        print(NAME +':'+ CONTACTORS[NAME])

        CHANGE = input('是否修改用户资料(YES/NO):')

        if ( CHANGE == 'YES'):

            TEL = input('请输入新的用户联系电话:')

            CONTACTORS[NAME] = TEL

            return

        else:

            print('感谢使用,再见!!!')

            return

    TEL = input('请输入用户联系电话:')

    CONTACTORS[NAME] = TEL


def DEL_CONTACTOR():

    NAME = input('请输入要删除的联系人姓名:')

    if NAME in CONTACTORS:

        CONTACTORS.pop(NAME)

    else:

        print('没有此联系人!!!')


while 1:

    print('|---------------------------|')

    print('|---欢迎进入通讯录程序---|')

    print('|--- 查询联系人资料:1---|')

    print('|--- 插入新的联系人:2---|')

    print('|--- 删除已有联系人:3---|')

    print('|--- 退出通讯录:    4---|')

    NUM = int(input('请输入相关指令代码:'))

    if NUM == 1:

        QUERY_CONTACTOR()

        continue

    elif NUM == 2:

        NEW_CONTACTOR()

        continue

    elif NUM == 3:

        DEL_CONTACTOR()

        continue

    elif NUM == 4:

        print('|---感谢使用通讯录程序---|')

        break

    else:

        print('请输入正确的指令!')

        continue