06字典

# -*- coding: utf-8 -*-
#===============================================================================
#第六章 字典

'''
目录
6.1 为什么要引入字典
6.2 创建和使用字典
6.2.1 dict函数
6.2.2 字典的基本操作
6.2.3 字典的格式化字符串
6.2.4 序列与迭代
6.3 字典方法
6.3.1 clear方法
6.3.2 copy方法与deepcopy函数
6.3.3 fromkeys方法
6.3.4 get方法
6.3.5 items方法和keys方法
6.3.6 pop方法和popitem方法
6.3.7 setdefault方法
6.3.8 update方法
6.3.9 values方法
'''


# 6.1为什么要引入字典

#===============================================================================
# 通过一个关键字,快速查询更多的内容
#===============================================================================
'''
#测试
a=["a","b","c"]
b=["A",'B','C']
print(b[a.index("a")])
'''


#6.2创建和使用字典

#===============================================================================
# 6.2.1dict函数
# 字典:{"A":"a","B":"b","B":"2"},左键右值,键相同时,默认后面的值
# dict函数可以通过其他映射(字典)或键值对的序列建立字典
# 如:a=[["A","a"],["B","b"],("C","c")];;dict(a)的结果是{"A":"a","B":"b","C":"c"}
# 还可以通过关键字参数来创建字典
# 如:dict(A="a",B="b",C="c")的结果是:{"A":"a","B":"b","C":"c"}
# 没参数时,会创建一个空字典
#===============================================================================
'''
#测试
a=[]
while True:
x=input("请输入Key:")
if x=="end":
break
y=input("请输入value:")
b=[x,y]
a.append(b)
print(dict(a))
'''

#===============================================================================
# 6.2.2字典的基本操作
# 现有字典 a
# len(a):返回字典a中键值对的数量
# a[key]:返回key对应的value
# a[key]=value:生成新的键值对,或者把key对应的值改为value
# del a[key]:删除key这对键值对
# key in a:检查key是否在字典a中存在,返回布尔型
# 键类型:任意不可变类型,如浮点数,元组,字符串等
# 自动添加:在a[key]=value时,如果没有key,那么就自动添加
# 查找成员:key in a在字典中是查找key,在列表中是查找value
#===============================================================================
'''
#测试
a={}
a[20]="Bill"
a["asd"]={'age':30,'name':'heheh'}
a[(12,'Mile',True)]="hello"
print(a)
IDEs={
1:{'china':['一','壹'],'alabo':1},
2:{'china':['二','贰'],'alabo':2},
3:{'china':['三','叁'],'alabo':3}
}
labels={'china':"中文",'alabo':'阿拉伯'}
a=int(input("请输入数字(1--3):"))
b=input("请输入国家(china或者alabo):")
print("数字{}的{}语言是{}".format(a,labels[b],IDEs[a][b]))
'''

#===============================================================================
# 6.2.3字典的格式化字符串
# 如:字典X={"A":"a","B":"b"}中的"A"就是"asd{A}vz{B}c".format_map(X) 结果:"asdvzbc"
#===============================================================================
'''
#测试
a={'name':'曾森','age':18,'salary':'1546'}
s="{name}在他{age}的时候,{name}的工资就已经有{salary}元了"
print(s.format_map(a))
'''

#===============================================================================
# 6.2.4序列与迭代
# 序列有:列表、元组、字典
# 1.获取字典中的key:用for语句遍历取出字典的key
# 2.同时获取字典中的key和value:
# ①:在1的基础上,用字典[key]来取出value
# ②:用字典的items方法获取key和value。如:for key,value in dict.items()
# 3.并行迭代:同时迭代多个序列。如:a=['A','B'];b=['a','b'];for i in rang(len(a))。a[i]和b[i]就是同时取出的值
# 4.压缩序列:用zip函数将多个序列的对应元素作为一个元组放到一起,元素个数不同时,依最少元素的序列为准
# 如:a=['A','B'];b=[1,2,3];for value in zip(a,b);value就是压缩后的每一个元组
# 因为zip返回值比较复杂,不能直接使用print输出,要遍历输出
# 5.反转序列迭代:reversed函数可以将序列反转
# 如:a=reversed(b=[1,2,3]);for m in a:print(m)结果:[3,2,1]
# 因为reversed返回值比较复杂,不能直接使用print输出,要遍历输出
#===============================================================================
'''
#测试
a={'A':'a','B':'b','C':'c'}
for key in a:
print(key,"=",a[key],end=" ")
print()
for n,m in a.items():
print(n,'=',m,end=" ")
s1=[1,2,3,4,5]
s2=['a','b','c','d','e']
for i in range(len(s1)):
print("s1的{}对应s2的{}".format(s1[i],s2[i]))
for n in zip(s1,s2):
print(n,end=" ")
print()
s3=['A','B','C']
for n in zip(s3,s2):
print(n,end=" ")
print()
x=[4,1,3,6,5,2,8]
print(sorted(x))
y=reversed(x)
for n in y:
print(n,end=" ")
print()
print("".join(list(reversed('hello world'))))
'''


#6.3字典方法

#===============================================================================
# 6.3.1clear方法
# 清空字典中的所有元素。如果字典A和B指向同一个字典,然后A={},那么B不会被清空,如果A.clear(),那么B也清空
# 6.3.2copy方法与deepcopy函数
# copy是浅层复制,新字典更改第一层数据不会影响原字典。新字典更改第二层数据会同步更改原字典。改原字典也一样:dict.copy()
# 如:a={'A':1,'B':2,"C":[1,2,3]}; b=a.copy(); b['A']=9; b['C'][1]=5
# 结果:a={'A': 1, 'B': 2, 'C': [1, 5, 3]} b={'A': 9, 'B': 2, 'C': [1, 5, 3]}
# deepcopy是深层复制,即原字典的更改不会影响新字典,相当于两个不同的字典:deepcopy(dict)
# 6.3.3fromkeys方法
# 根据key建立新的字典(返回值就是新的字典)
# 第一个参数是指定新字典的key集合
# 第二个参数是key对应的默认值
# 6.3.4get方法
# 字典中用dict[key]取值时如果没有key就会报错
# 使用dict.get('x',0)表示如果字典dict中没有"x"这个key值,则会返回0。不给第二个参数则默认返回None
# 如:a={'A':1,'B':2};a.get('X'); a.get('C',0)
# 结果:None 0
# 6.3.5items方法和keys方法
# items用来获取字典中每一个键值对,都各用一个元组表示。修改字典的值,元组也会改变
# 如:a={'A':1,'B':2};a.items()
# 结果:dict_items([('A', 1), ('B', 2)])
# keys用来获取字典中所有keys,返回一个元组
# 如:a={'A':1,'B':2};a.keys()
# 结果:dict_keys(['A', 'B'])
# 6.3.6pop方法和popitem方法
# pop:根据指定的key,获取值,返回key对应的value
# 如:a={'A':1,'B':2};a.pop('B')
# 结果:2
# popitem:获取最后一个键值对,返回key和value
# 如:a={'A':1,'B':2};a.popitem()
# 结果:('A', 1)
# 如:a={'A':1,'B':2};a['C]=3;a.popitem()
# 结果:('C', 3)
# 6.3.7setdefault方法
# 两个参数,一个key,一个value
# 没指定第二个参数时,key的默认值为None
# 当字典中没有key时,自动添加,并且返回value,存在key时,返回字典中的key对应的value
# 如:a={'A':1,'B':2}; a.setdefaults('A',9); a.setdefaults('C'); a.setdefaults('D',4)
# 结果:1 None 4
# 6.3.8update方法
# 用一个字典中的元素更新另外一个字典,有一个参数:更新数据来源的字典
# 被更新的字典中如果没有键值对,会自动添加,如果有同样key,则value会被更新
# 如:a={'A':1,'B':2};b={'A':3,'C':5};a.update(b)
# 结果: {'A': 3, 'B': 2, 'C': 5}
# 6.3.9values方法
# 用来获取字典中所有values,返回一个元组
# 如:a={'A':1,'B':2};a.values()
# 结果: ([1,2])
#===============================================================================


'''
#练习题
#1.在字典中添加1000个key-value对,key随机产生,value也可以随机,如果key存在,则不作改变。最后输出全部键值对
import random
a={}
for m in range(1000):
n=random.randint(0,10)
a.setdefault(n, m)
print(a.items())
print(len(a))
#2.控制台输入包含整数的字符串,将整数格式化长度10的格式,左边0补全
# 不使用正则表达式,使用字典格式化字符串,将输入的字符串转化为字符串模板再进行格式化,最后输出字符串模板和结果
#s = input("请输入一个包含整数的字符串:")
s= ' hello 432 world 54 I Love 45678 Python. '
s1 = ''
number = ''
index = 0
d = {}
for i in range(len(s)):
c = s[i]
if ord(c) in range(48,58):
number += c #循环取出完整的整数
else:
if len(number) > 0:
s1 += "{{number{indexs}:010}}".format(indexs=index)
d['number' + str(index)] = int(number)
index += 1
number = ''
s1 += c
if len(number) > 0:
s1 += "{{number{}:010}}".format(index)
d['number' + str(index)] = int(number)
print(s1)
print(s1.format_map(d))
'''

猜你喜欢

转载自www.cnblogs.com/zengsen666/p/12093404.html