数据分析入门_PART1python基础语法_CH04字典映射

'''
【课程4.1】  字典dict基本概念

字典是另一种可变容器模型,且可存储任意类型(字典嵌套,列表等都可以,万物皆对象)对象。

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

键必须是唯一的,但值则不必。
(dict无序,故键是dict的index,必须唯一)

list/tuple/string有序,序号是dict的index,每个元素有唯一的序号
'''
'\n【课程4.1】  字典dict基本概念\n\n字典是另一种可变容器模型,且可存储任意类型(字典嵌套,列表等都可以,万物皆对象)对象。\n\n字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 \n\n键必须是唯一的,但值则不必。\n(dict无序,故键是dict的index,必须唯一)\n\nlist/tuple/string有序,序号是dict的index,每个元素有唯一的序号\n'
# 什么是映射?什么是字典dict?
# 首先虽然序列是有顺序的,但还是不能直接把名字和年龄关联起来,这里只是顺序对上,且并没有一对一的关系
name = ['大头儿子','小头爸爸','隔壁老王']
age = [6,35,37]

# 用{}来表示,按照key:value来表示字典中的元素,其中key是键,value是值,key-value也就是键值对
# 这里dic就是一个字典类型的变量
dic={'大头儿子':6,"小头爸爸":35,"tom":45}
print(dic,type(dic))

# 一个以字典为元素的列表,有没有觉得键值对很像数据中的字段和字段值?
lstofdic=[{'name':'Tom', 'age':18},{'name':'Jack', 'age':19},{'name':'Alex', "age":17}]
print(lstofdic)
{'大头儿子': 6, '小头爸爸': 35, 'tom': 45} <class 'dict'>
[{'name': 'Tom', 'age': 18}, {'name': 'Jack', 'age': 19}, {'name': 'Alex', 'age': 17}]
# 字典的特点

# 键值对,一定共同出现,不能只有一个
dic = {'a':1,'b':2,'c':3}

# 不允许同一个键出现两次:创建时如果同一个键被赋值两次,后面的值会覆盖前面的
dic = {'a':1,'a':2}
print(dic)

# key必须是字符串,value则可以是任意对象:数值,字符串,序列,字典
dic = {'var1':1, 'var2':'hello', 'var3':[1,2,3], 'var4':{'a':1,'b':2}}

#dict无序,键是dict的index,和[](python中[]用于index相关操作)配合使用
# 任意添加元素
dic['var5']='addone'
# 任意修改元素
dic['var4']='changeone'
# 任意删除元素(整个键值对都删掉)
del dic['var1']
print(dic)
#清空所有条目,但是dic这个dict对象还存在,dic.clear()方法
dic.clear()
print(dic)
#完全删除dic ,dic对象完全消失
del dic
print(dic)
{'a': 2}
{'var2': 'hello', 'var3': [1, 2, 3], 'var4': 'changeone', 'var5': 'addone'}
{}



---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-22-440bae37fbee> in <module>
     24 #完全删除dic ,dic对象完全消失
     25 del dic
---> 26 print(dic)


NameError: name 'dic' is not defined
#创建字典的方法

#法一 dict={}括号创建法
#注1:类似list=[],tup=()列表的括号创建法
#注2:dict对象的名字不能为dict 因为dict为python自带创建函数保留名。
#而dict对象只是一个自定义对象,会发生命名冲突
#同样的情况适用于list 所以常用lst=[]
#注3{}里键值对之间:连接,不同键值对之间,连接

#法二 (最常用)dict()函数结合复合listofcouplist创建法

'''
注类似list() tuple()函数结合range或结合彼此的创建法
tup=tuple(range(1,5,2))
lst=list(range(1,5,2))
lst1=list(tup)
tup1=tuple(lst)
'''

#法三 dict.fromkeys(listofkeys)方法结合listofkeys创建法
'\n注类似list() tuple()函数结合range或结合彼此的创建法\ntup=tuple(range(1,5,2))\nlst=list(range(1,5,2))\nlst1=list(tup)\ntup1=tuple(lst)\n'
#法一 dict={}括号创建法
dic={'a':1,'b':2}

#法二 (最常用)dict()函数结合嵌套list listofcouplist创建法
lst1=[('a',1),('b',2)]
lst2=[['a','b'],['c','d']]
lst3=[[1,[2,3]],[2,[3,2]]]
print(lst1,lst2,lst3)
dic1=dict(lst1)
dic2=dict(lst2)
dic3=dict(lst3)
print(dic1,dic2,dic3)

#法三 dict.fromkeys(listofkeys)方法结合listofkeys创建法
keys=['a','b','c']

#case1 value全为None
dic1=dict.fromkeys(keys)
#case2 value全为给定参数
dic2=dic.fromkeys(keys,"初始值")
print(dic1,dic2)
[('a', 1), ('b', 2)] [['a', 'b'], ['c', 'd']] [[1, [2, 3]], [2, [3, 2]]]
{'a': 1, 'b': 2} {'a': 'b', 'c': 'd'} {1: [2, 3], 2: [3, 2]}
{'a': None, 'b': None, 'c': None} {'a': '初始值', 'b': '初始值', 'c': '初始值'}
'''
小作业
① 用dict函数的时候,和直接申明一个字典,操作上什么区别?
dic = {'a':1,'b':2}
dic = dict(m = 10 ,n = 'aa', h = [1,2,3])
直接申明用key:value连接键值对 用dict()函数用key=vlaue连接键值对

② 用dict()函数从序列创建字典的时候,对序列有要求吗?必须是列表吗?
list或tuple都可以

③ 字典是无序的,强化一下

④ 以dict()函数生成一个人的成绩单,包括语文,数学,外语,物理,化学几个元素
lstofcoup=[['语文',100],['数学',100],['外语',100]]
dic=dict(lstofcoup)
print(dic)
'''
"\n小作业\n① 用dict函数的时候,和直接申明一个字典,操作上什么区别?\ndic = {'a':1,'b':2}\ndic = dict(m = 10 ,n = 'aa', h = [1,2,3])\n直接申明用key:value连接键值对 用dict()函数用key=vlaue连接键值对\n\n② 用dict()函数从序列创建字典的时候,对序列有要求吗?必须是列表吗?\nlist或tuple都可以\n\n③ 字典是无序的,强化一下\n\n④ 以dict()函数生成一个人的成绩单,包括语文,数学,外语,物理,化学几个元素\nlstofcoup=[['语文',100],['数学',100],['外语',100]\ndic=dic(lstofcoup)\nprint(dic)\n"
'''
【课程4.2】  字典常用操作

字典内置函数&方法

'''
'\n【课程4.2】  字典常用操作\n\n字典内置函数&方法\n\n'
#dic1.upadate(dic2)方法 ,把dic2合并到dic1,改变第一个字典
dic1={'a':1,'b':2}
dic2={'c':3,'d':4}
dic1.update(dic2)
print(dic1,'\n',dic2)

#和序列的原理一样,b=a只传递引用,两者指向同一个字典实体,所以会一起更新
a={'m':1,'n':2,'s':3}
b=a
a.update({666:222,666:555})
print(a,'\n',b)

# 通过b=a.copy()方法,复制一个新的字典实例对应b,则a.update只改变a不改变b
a={'m':1,'n':2,'s':3}
b=a.copy()
a.update({666:222,666:555})
print(a,'\n',b)

#len(dic)函数查看dic长度
print(len(a))

# in / not in :成员运算只能通过key判断是否包含,value不行
print('m' in a)
print(1 not in a)
{'a': 1, 'b': 2, 'c': 3, 'd': 4} 
 {'c': 3, 'd': 4}
{'m': 1, 'n': 2, 's': 3, 666: 555} 
 {'m': 1, 'n': 2, 's': 3, 666: 555}
{'m': 1, 'n': 2, 's': 3, 666: 555} 
 {'m': 1, 'n': 2, 's': 3}
4
True
True
'''
【课程4.3】  字典的元素访问及遍历

如何读取字典?

'''
'\n【课程4.3】  字典的元素访问及遍历\n\n如何读取字典?\n\n'
#dict中元素访问
#part1 访问单个value
#法一dic[key]得对应value
dic={'a':1,'b':2,'c':3}
print(dic['a'])

# 注对于嵌套字典dicofdic,输出嵌套内容,通过重复来输出poi[key外][key内]
poi={'name':'shop', 'city':'shanghai', 'information':{'address':'somewhere', 'num':66663333}}
print(poi['information']['address'])

#法二dic.get(key)方法
#注 若无key则返回None ,添加print参数可以多返回一个值
print(poi.get('name'))
print(poi.get('xxx',print('nothing')))

#part2 访问所有values
#注dic.values()方法返回值为视图(range()即为一种视图)
#可以结合list(dic.values())得到listofvalues
print(poi.values(),type(poi.values()))
print(list(poi.values()))


#part3 访问所以keys
#同上
print(poi.keys(),type(poi.keys()))
print(list(poi.keys()))

#part4 访问所有键值对items 输出结果是 视图ofitems
#同上
print(poi.items(),type(poi.values()))
print(list(poi.items()))
1
somewhere
shop
nothing
None
dict_values(['shop', 'shanghai', {'address': 'somewhere', 'num': 66663333}]) <class 'dict_values'>
['shop', 'shanghai', {'address': 'somewhere', 'num': 66663333}]
True
dict_keys(['name', 'city', 'information']) <class 'dict_keys'>
['name', 'city', 'information']
dict_items([('name', 'shop'), ('city', 'shanghai'), ('information', {'address': 'somewhere', 'num': 66663333})]) <class 'dict_values'>
[('name', 'shop'), ('city', 'shanghai'), ('information', {'address': 'somewhere', 'num': 66663333})]
# 字典的元素遍历 for循环
#字典元素遍历一定要先转换为视图
#注for脱下复合列表或视图的最外一层括号

poi = {'name':'shop', 'city':'shanghai', 'information':{'address':'somewhere', 'num':66663333}}

for key in poi.keys():
    print(key)

for value in poi.values():
    print(value)

for (k,v) in poi.items(): 
    print('key=%s value=%s'%(k,v))

name
city
information
shop
shanghai
{'address': 'somewhere', 'num': 66663333}
key=name value=shop
key=city value=shanghai
key=information value={'address': 'somewhere', 'num': 66663333}
#dict和list的复合--listofdics
data=[{'name':'jam','age':18},{'name':'tim','age':12},{'name':'jason','age':58}]

#for拆一层括号,i代表每个dic
for i in data:
    # 两种写法等效
    print(i['name'])
    print(i.get('name'))
     
jam
jam
tim
tim
jason
jason
"""
小作业
① dict.keys()生成的是不是列表?
是视图,通过list(dict.keys())转换为列表
② 如何判断一个value是否存在于字典中?
print('shop' in poi.values())
"""

猜你喜欢

转载自blog.csdn.net/weixin_40974922/article/details/93115760