python 3.6.5字典的特性和定义定义:{'key_1':vlaue_1,'key_2':value_2}1.键与值用冒号 : 分开2.项与项 用 , 分开 特性1.可以存放多个值,可以不唯一,可以修改2.key-value 结构3.key必须可hash,且必须唯一,不可变类型4.无序的 字典的创建和常见操作以下是几种:创建字典的操作dic={}dic['add1']='value1'dic['add2']='value2'
dict_name={'yan':'xia','ting':'yu'}dict_name=dict(yan='xia',ting='yu')#{'yan': 'xia', 'ting': 'yu'}# dict_name=dict({'yan':'xia','ting':'yu'})#{'yan': 'xia', 'ting': 'yu'}# dict_name={k+1:v for k,v in enumerate(range(1,10))}#字典推到自#{1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9} # dict_name={}.fromkeys(['key1','key2'],100)# {'key1': 100, 'key2': 100}#默认值是100# dict_name={}.fromkeys(['key1','key2'],[])#默认值是空list# {'key1': [], 'key2': []}print(dict_name)
#使用zip生成字典(强制类型转换)list_1=[i for i in range(1,5)]list_2=[i for i in range(6,10)]dict_3=zip(list_1,list_2)#type:class 'zip'dic=dict(dict_3)print(dic)#{1: 6, 2: 7, 3: 8, 4: 9}
dict.keys()# 返回包含所有键的列表dict.values()# #返回包含所有值的列表dict.items()# #返回包含所有键-值的元组
dict_list={k:v for k,v in enumerate(range(1,10))}print(dict_list.items())>>:dict_items([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)])
#新增:dic={'yanxia':'tianyu'}dic.setdefault('天','空')#假如字典中不存在键 则将后面的值赋值给键dic['add']='value'dic.update(name='yanxiatingyu')dic.update({'name_2':'yanxitingyu'}) #删除#dic.pop('add')#返回值,并且删除键值对 key-value,键不存在 报错#del dic['add']#dic.clear()#>>:{}删除所有 键-值 dic =空字典。 #修改值dic['add']='飞行'dic.update(name='yanxiatingyu')dic.update({'name_2':'yanxitingyu'})#print(dic) #查看dic['add']dic.get('add',default='这是默认值')#假如add 不存在 就返回 后面default里面的值print(dic.__getitem__('add')) 长度len(dic)
字典的遍历 dic,dic.keys(),dic.values(),dic.items() sample:for k,v in dic.items(): print('%s %s'%(k,v)) D.clear() #移除D中的所有项 D.copy() #返回D的副本 D.fromkeys(seq[,val]) #返回从seq中获得的键和被设置为val的值的字典。可做类方法调用 D.get(key[,default]) #如果D[key]存在,将其返回;否则返回给定的默认值None D.has_key(key) #检查D是否有给定键key D.items() #返回表示D项的(键,值)对列表 D.keys() #返回D键的列表 D.pop(key[,d]) #移除并且返回对应给定键key或给定的默认值D的值 D.popitem() #从D中移除任意一项,并将其作为(键,值)对返回 D.setdefault(key[,default]) #如果D[key]存在则将其返回;否则返回默认值None D.update(other) #将other中的每一项加入到D中。 D.values() #返回D中值的列表
python 2.x
iterkeys()iteritems()itervalues()单纯的取值效率上比keys()items()values()这三种方法效率要高 dic={'name':'this is test'}import time#效率测试
dic={'name':'this is test'}import time#效率测试time_start=time.time()for i in range(0,10000): dic.__getitem__('name')end_start=time.time() time_start1=time.time()for i in range(0, 10000): dic.get('name')end_start1=time.time() time_start2=time.time()for i in range(0, 10000): dic['name']end_start2=time.time()print()print((end_start-time_start))print((end_start1-time_start1))print((end_start2-time_start2))1 # 0.0020000934600830082 # 0.0030000209808349613 # 0.0009999275207519531测试了10次第三种取值方法基本上时间都是最小的第2种往往是最大的,第3种次之不过笔者有点懵逼,__getitem__()不是底层实现吗?为什么反而没有dict['key_name']取值速度快呢?dic['key_name']背后就是dic.__getitem__() 仿 编译型语言switch语句 多分支选择
def taskForSunday(): print("今天休息")def taskForRest(): print("今天休息")def taskForChinese(): print("今天上语文课")def taskForMath(): print("今天上数学课")def taskForEnglish(): print("今天上英语课")def taskForDefault(): print("输入错误啦。。。。")switch = {"Sunday": taskForRest, "Monday": taskForChinese, "Tuesday": taskForMath, "Wednesday": taskForEnglish, "Tursday": taskForEnglish, "Friday": taskForEnglish, "Saturday": taskForRest } day='sfds'switch.get(day,taskForDefault)()
class Switch: switch = None @classmethod def switch(cls, day): switchDic = {"Sunday": cls.casetaskForRest, "Monday": cls.casetaskForChinese, "Tuesday": cls.casetaskForMath, "Wednesday": cls.casetaskForEnglish, "Tursday": cls.casetaskForEnglish, "Friday": cls.casetaskForEnglish, "Saturday": cls.casetaskForRest } cls.switch = switchDic.get(day, cls.casetaskForDefault)() return cls.switch @staticmethod def casetaskForSunday(): print("今天休息") @staticmethod def casetaskForRest(): print("今天休息") @staticmethod def casetaskForChinese(): print("今天上语文课") @staticmethod def casetaskForMath(): print("今天上数学课") @staticmethod def casetaskForEnglish(): print("今天上英语课") @staticmethod def casetaskForDefault(): print("输入错误啦。。。。") Switch.switch('Sunday')