Python--第六课(字典)

字典是另一种可变容器模型,且可存储任意类型对象.

一、字典的创建

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,

格式如下所示:

dict={key1:value1,key2:value2}

键必须是唯一的,但值则不必.不允许同一个键出现两次创建时如果同一个键被赋值两次,后一个值会被记住并且覆盖上一个值

值可以取任何数据类型,但键必须是不可变得如字符串/数字/元组.而列表则不行

二、字典的增删改查

<1>增;

d['不在d里的键']=值

 
stus={'张三':16,'李四':19}
dit={'爱好':['吃','烫头']}

stus['小明']=20
stus['小明']=25#覆盖上一个值20将不显示
print(stus)

执行命令得

 
{'张三': 16, '李四': 19, '小明': 25}

<2>删:

del d['删除的键']如果不存在就抛异常

扫描二维码关注公众号,回复: 494220 查看本文章

pop('删除的键[,default]')  default:默认值 如果删除键存在则返回键值否则返回默认值

 
stus={'张三':16,'李四':19}
del stus['张三']#如果无'张三'得键则会抛异常
print(stus)
ret=stus.pop('小明1','无此key')#[,default]当删除的key不存在返回的值系统不抛异常
print(ret)

执行命令得

 
{'李四': 19}
无此key

<3>改:

d['需要修改的键']=值 如果此键不存在就变成了增加此键

 
stus={'张三':16,'李四':19}
stus['张三']=20
print(stus)

执行命令得

 
{'张三': 20, '李四': 19}

<4>查:

d.get('键','默认值') 需要查询的键不存在则返回默认值不抛异常

 
stus={'张三':16,'李四':19}
print('小明年龄',stus.get('小明',不存在))
print('小明年龄',stus.get('小明1',不存在))
print('张三年龄'.stus['张三'])#党茶渠key不存在时抛异常不建议使用

执行命令得

小明年龄 20
小明1年龄 不存在
张三年龄 16

三、字典的遍历

len(d)元素个数

d.keys()获取字典的键

values()获取字典的键值

items()得到每个键值对得元组 item[0]代表键 items[1]代表键值

 
dict={'张三':18,'李四':20}
print(len(dict))
for key in dict.keys():
    print(key)
for value in dict.values():
    print(value)
for item in dict.items():
    print(item[0],item[1])

执行命令得

 
2
张三
李四
18
20
张三 18
李四 20

练习

(电话通讯录)  创建2个列表 一个存姓名 一个存手机
=======通讯录管理系统=======
1.增加姓名和手机
2.删除姓名
3.修改手机
4.查询所有用户
5.根据姓名查找手机号
6.退出

============================

 
phones={'123':'张三','456':'李四'}
while True:
    print('=======通讯录管理系统=======')  
  print('1.增加姓名和手机')  
  print('2.删除姓名')  
  print('3.修改手机')  
  print('4.查询所有用户')  
  print('5.根据姓名查找手机号')  
  print('6.退出')  
  print('============================')  
  num=int(input('请输入数字:'))  
    num=int(input('请输入数字:'))
    if num==1:
         name=input('请输入新姓名:')
         phone=input('请输入新电话:')
         while phone in phones.keys():
             phone=input('电话已存在 请重新输入:')
         phones[phone]=name
         print('录入成功')
    elif num==2:
        name = input('请输入姓名:')
        for temp in phones.items():
            if temp[1].__eq__(name):
                phones.pop(temp[0])
                print('删除成功')
                break#当两个名字相同手机号不同时,删除一个加break 如果都删除则不加
            else:
                print('无此用户')
    elif num==3:
        phone = input('请输入电话:')
        if phone in phones.keys():
            new_phone=input('请输入新的电话:')
            while new_phone in phones.keys():
                new_phone=input('电话已存在 请重新输入新的电话:')
            name=phones.pop(phone)
            phones[new_phone]=name
            print('修改成功')
        else:
            print('无此电话')
    elif num==4:
        for temp in phones.items():
            print('姓名:'+temp[1],'电话:'+temp[0])
    elif num==5:
        name = input('请输入姓名:')
        for temp in phones.items():
            if temp[1].__eq__(name):
                print('姓名:'+temp[1],'电话'+temp[0])
    elif num==6:
        print('谢谢使用')
        break

四、字典的特性

1.不允许同一个键出现两次,创建时如果同一个键被赋值两次,后一个值被记住

2.键必须不可变,所以可以用数字/字符串/元祖充当,而不能用列表

和list比较,dict有以下几个特点:

查找和插入的速度几块,不会随着key得增加而变慢

需要占用大量的内存,内存浪费多.

hashcode 算法

而list是相反:

查找和插入的时间随着元素的增加而增加

占用空间小,浪费内存很少


字典是可以无限嵌套的

 
citys={
    '北京':{
        '朝阳':['三里屯','国贸'],
        '海淀':['中关村','公主坟'],
        '丰台':['角门西','天台']
        },
    '河北':{
        '廊坊':['大城县','霸州'],
        '石家庄':['桥西区','桥东区'],
    }
}
for city in citys.keys():
    print(city)
    for town in citys.get(city).keys():
        print('\t'+town)
        print('\t\t'+str(citys.get(city).get(town)))

执行命令得

 
北京
	朝阳
		['三里屯', '国贸']
	海淀
		['中关村', '公主坟']
	丰台
		['角门西', '天台']
河北
	廊坊
		['大城县', '霸州']
	石家庄
		['桥西区', '桥东区']

五、字典中的内置函数

序号 函数及描述
1

dict.clear()

删除字典的所有元素 

2

dict.copy()

复制一个字典内容 3

dict.fromkeys()

创建一个新的字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 

4

dict.get(key.default=None)

返回指定键的值,如果值不在字典中返回default值 

5

key indict 

如果建在字典dict例返回true否则返回false

6

dict.items()

以列表返回可遍历的(键 .值)元祖数组 

7

dict.keys

 以列表返回一个字典所有的键

8

dict.setdefaulet(key.default=None)

和get() 类似 但如果键不存在于字典中,将会添加键和值设为default 

9

dict.update(dict2)

把字典dict2的键/值对更新到dict里 

10

dict.values()

以列表返回字典中的所有值

11

pop(key[.default]) 

删除字典给定健key所对应的值,返回值为被删除的值,key值必须给出.否则fanhuidefault

12

popitem()

随机返回并删除字典中的一对键和值(一般删除末尾对) 不建议使用 




猜你喜欢

转载自blog.csdn.net/vanchaoi/article/details/80238115