2020-09-02

Python学习

1.字典的四个构造函数
(1)dict()构造函数可以返回一个空的字典
(2)dict(**arg)构造函数,传入参数用赋值表达式,可多个赋值表达式,用逗号间隔即可。
(3)dict(**kwargs)构造函数,这种情况下,key只能以字符串的形式出现,而且不能加引号。
(4)dict(mapping)构造python字典构造函数,那怎么传入这个mapping参数呢?Python下面的mapping到底是什么呢?

def fmap(a, b):
        return (a, b)
lik = range(1, 11)
liv = list("abcdefghij")
lim = map(fmap, lik, liv)
d = dict(lim)
print (d)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j'}

map函数的作用是:每次从可迭代对象(这里是列表lik和liv)取出一个元素值,经过fmap自定义函数的处理后作为新的(返回)列表的元素,就像列表解析一样。
2.字典的内置方法
(1)dict.fromkeys(seq[,value])
创建一个新字典,以seq中的元素作为key,value作为字典对应的初值

seq = ('name','age','sex')
dict1 = dict.fromkeys(seq)
dict2 = dict.fromkeys(seq,10)
dict3 = dict.fromkeys(seq, [1,2,3])
print(dict1)
print(dict2)
print(dict3)
{'name': None, 'age': None, 'sex': None}
{'name': 10, 'age': 10, 'sex': 10}
{'name': [1, 2, 3], 'age': [1, 2, 3], 'sex': [1, 2, 3]}

(2)dict.keys()返回一个可迭代对象,可以使用list()来转换为列表,列表为字典中所有的键

dict = {'name':1,'age':2,'sex':3}
print(dict.keys())
lst = list(dict.keys())
print(lst)
dict_keys(['name', 'age', 'sex'])
['name', 'age', 'sex']

(3)dict.item()以列表返回可遍历的(键,值)元组数组

dic = {'name':1,'age':2,'sex':3}
print('Value: %s'%dic.items())

print(tuple(dic.items()))
Value: dict_items([('name', 1), ('age', 2), ('sex', 3)])
(('name', 1), ('age', 2), ('sex', 3))

(4)dict.get(key,default = None),返回指定键的值,如果值不在字典中返回默认值(就是default的值,可以自己更改,不过一般不建议更改,None就代表了没有的意思)

dic = {'name':1,'age':2,'sex':3}
print(dic.get('name'))
print(dic.get('love'))
1
None

(5)dict.setdefault(key,default = None)和get()方法类似,如果键不存在字典中,将会添加键并将值设为默认值,重点是多了添加这个功能

dic = {'name':1,'age':2,'sex':3}
print(dic)
print(dic.setdefault('name'))
print(dic.setdefault('boss'))
print(dic)
{'name': 1, 'age': 2, 'sex': 3}
1
None
{'name': 1, 'age': 2, 'sex': 3, 'boss': None}

(6)key in dict,in操作符判断键是否存在字典中,存在返回true,反之返回false。not in
则相反
(7)dict.pop(key[,default])删除字典给定键的值,并返回该值。若key不存在,则返回default
(8)del dict[key]仅删除给定键所对应的值
(9)dict.popitem()随机返回并删除字典中的一对键和值。如果字典已经为空,就会出现KeyError异常。

dic = {'name':1,'age':2,'sex':3}
print(dic.popitem())
print(dic.popitem())
print(dic.popitem())
print(dic.popitem())
('sex', 3)
('age', 2)
('name', 1)
Traceback (most recent call last):
  File "D:/PC项目/dream/TEST4.py", line 11, in <module>
    print(dic.popitem())
KeyError: 'popitem(): dictionary is empty'

(10)dict.clear()用于删除字典中所有的元素

dic = {'name':1,'age':2,'sex':3}
print(len(dic))
dic.clear()
print(len(dic))

3
0

(11)dict.copy()返回一个字典的浅复制。

dic = {'name':1,'age':2,'sex':3}
dic1 = dic.copy()
print(dic1)
{'name': 1, 'age': 2, 'sex': 3}

(***12)直接赋值和copy的区别(重点!)
直接赋值:对象的引用,可以理解为对象的另一个名字。这两个名字都表示这个对象,对象内部的值一旦变化,那么两个名字输出的结果都会变化。
浅拷贝:拷贝父对象,不会拷贝对象内部的子对象
。父对象不随原来父对象的改变而改变,子对象随着原来子对象的改变而改变。
深拷贝:copy模板的deecopy方法,完全拷贝了父对象及其子对象。

dict1 = {'user': 'runoob', 'num': [1, 2, 3]}

dict2 = dict1  # 浅拷贝: 引用对象
dict3 = dict1.copy()  # 深拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用

# 修改 data 数据
dict1['user'] = 'root'
dict1['num'].remove(1)

# 输出结果
print(dict1)
print(dict2)
print(dict3)
{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'runoob', 'num': [2, 3]}
def extend_list(val, list=[]):
    list.append(val)
    return list


list1 = extend_list(10)
list2 = extend_list(123, [])
list3 = extend_list('a')

print("list1 = %s" % list1)
print("list2 = %s" % list2)
print("list3 = %s" % list3)
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

(13)dict.update(dict2)把字典参数dict2的key:value对更新到字典dict里

dict1 = {'user': 'runoob', 'num': [1, 2, 3]}
dict2 = {'I':'cgb','you':'wy'}
dict1.update(dict2)
print(dict1)
{'user': 'runoob', 'num': [1, 2, 3], 'I': 'cgb', 'you': 'wy'}

练习题:
1、字典基本操作

dic = {'python':95,
       'java':99,
       'c':100
       }
#字典长度
print(len(dic))
#修改‘java’这个key对应的value值为98
dic['java'] = 98
print(dic['java'])
#删除c这个key
del dic['c']
print(dic)
#增加一个key-value对,key值为php,value是90
dic['php'] = 90
print(dic)
#获取所有的key值,存储在列表里
lst1 = list(dic.keys())
print(lst1)
#获取所有的value值,存储在列表里
lst2 = list(dic.values())
print(lst2)
#判断javascript是否在字典中
print('javascript' in dic)
#获取字典里所有value的和
print(sum(dic.values()))
#获取字典里最大的value
print(max(dic.values()))
#最小
print(min(dic.values()))
#数据更新
dic1 = {'php':97}
dic.update(dic1)
print(dic)
3
98
{'python': 95, 'java': 98}
{'python': 95, 'java': 98, 'php': 90}
['python', 'java', 'php']
[95, 98, 90]
False
283
98
90
{'python': 95, 'java': 98, 'php': 97}

2.字典中的value
有一个字典,保存的是学生各个编程语言的成绩,各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(socre_dict),将分数修改成int类型(没想出来,明天再想~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值