Python的数据类型--字典以及字典练习

一、字典
1.字典是Python中的唯一的映射类型(哈希表) key 和 value 对应。
2.字典的对象是可变的,也是value是可变的,就是key后面的值是可以变的,但是字典的健是 不可变对象 。也就是key 不可变。一个字典中可以使用不同的健值,就是说key 可以是字符串 元祖 。不行是不可变的。像列表就不可以,因为他是可变的。

提示:不能使用列表。不是哈希的类型

二、字典的创建
1.创建字典
(1)创建一个空字典:dic = {} 这样就创建了一个空字典。
(2)创建一个字典 dic = {'a':1,'b':2} 但是创建完后可以发现 顺序被打乱了,因为字典是无序的

因为是哈希表 ,哈希表就是无序的。
key 和value 前面一个是key 不可更改,后一个是value 可以改变。
注意:在字典里Key 是唯一的 不能冲突。
(3)使用dict 来创建字典
dict([(1,2),(3,4)])

使用zip来合并2个列表成为一个字典
dict(zip(list1,list2))

dict(a=10,b=20) 传参数到字典。

2.获取字典的数据
获取字典的数据和前面的元祖列表不一样,前2个是获取的下标来取值,字典是获取的key来取值
比如:a['a'] 这样来取健值a得值。

3.改变字典的值 value
要改变字典的value 也非常简单
用法:a['a'] = 3 这样来修改,前面写的是key, 对这个key来修改值。


三、字典的方法
1.keys()方法:keys方法用于返回字典里所有的key,并组成一个列表。
用法:a.keys()

2.value()方法:和keys方法对应,返回字典里的value,并组成一个列表。
用法:a.value()

3.get()方法:get()方法是获取健值对应的value,如果这个健值key 不在字典中 返回的是None。
用法:a.get('a') 不存在字典中的话 返回None,如果有value值就返回该value值

4.判断key 是否在字典里
(1).可以直接使用in 和not in来判断
用法: 'a' in a
(2).使用has_key()方法也可以判断
用法:a.has_key('a')

5.items()方法:把字典返回成一个列表。每个key和value放入到一个元祖里。
用法:a.items()

6.copy()方法:copy方法是复制一个字典,可以把改字典赋值到一个新的字典中,形成一个一模一样的字典。
用法:b = a.copy() 把字典a的key和value复制到b字典中。如果没有新字典会打印字典中的值。

7.clear()方法:清楚字典里的所有元素。
用法:b.clear() 成为一个空字典。

8.pop()方法:删除一个健值 key 返回的是key对应的value,如果key不存在,会抛出一个异常
用法:a.pop('a') a.pop('d','不存在') 如果不存在kye 可以返回一个指定的对象,如果不加对象,就会报错。


9.update()方法:更新,可以把2个字典更新成一个字典,也可以理解成追加吧。更新的对象 是一个字典或者是一个迭代的对象。
用法:a.update(b) 把字典b更新到字典a中。
a.update({'c':4}) 更新一个字典到a中。

10.a.fromkeys()方法:创建一个新的字典,健值key 来自于序列,value来自自定义,如果没有设置value,那么会对应为一个None值。
用法:a.fromkeys(‘abc’,10) 适用于字典的值都是一样的。


a.fromkeys(range(100),100) 这样就创建了100个key 对应的值都是100.
三、使用for来访问字典
1.打印key
for k in a:
print k

2.打印key和value
for k in a:
print k, a[k] //多个变量显示在一行 用,号

3.用占位符 也可以
for k in a:
print "%s %s" %(k, a[k])

4.使用2个变量来获取对应的key和value
for k, v in a.items():
print k, v

四、字典的练习
info = {}
name = raw_input("Please input you name: ")
age = raw_input("Please input you age: ")
gender = raw_input("Please input (M/F): ")
info['name'] = name
info['age'] = age
info['gender'] = gender
for k, v in info.items():
print "%s:%s" %(k, v)
print 'main end'

这是一个用for循环遍历字典的操作。
结果是:



练习:
1. 现有一个字典dict1 保存的是小写字母a-z对应的ASCII码
dict1 = {'a': 97, 'c': 99, 'b': 98, 'e': 101, 'd': 100, 'g': 103, 'f': 102, 'i': 105, 'h': 104, 'k': 107, 'j': 106, 'm': 109, 'l': 108, 'o': 96, 'n': 110, 'q': 113, 'p': 112, 's': 115, 'r': 114, 'u': 117, 't': 116, 'w': 119, 'v': 118, 'y': 121, 'x': 120, 'z': 122}

1) 将该字典按照ASCII码的值排序
答: sorted(dict1.items(),key = lambda item:item[1])

2) 有一个字母的ASCII错了,修改为正确的值,并重新排序
答:dict1['o'] = 111
sorted(dict1.items(),key = lambda item:item[1])

2. 用最简洁的代码,自己生成一个大写字母 A-Z 及其对应的ASCII码值的字典dict2(使用dict,zip,range方法)
import string
dict2 = dict(zip(string.uppercase,range(65,91)))

3. 将dict2与第一题排序后的dict1合并成一个dict3
答: dict1.update(dict2)
dict3 = dict1.copy()


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值