可哈希性
print(hash('hello'))
字典是键值对,key对应值,其中key和value相对应,具有描述性的功能
#dic={}
#d={1:'aaa',2.2:'bbb','xxx':'ccc',(1,2,3):'dddd'} #d=dict(...)
#print(d[1,2,3]) #[1,2,3]对应的就是dddd
#类型转换
#d=dict(x=0,y=1)
#print(d)
#item=[('x',2),('y',3)]
#d_1=dict(item)
#print(d_1)
#keys=['name','age','gender','height','weight']
##d_2={}
#d_2={}.fromkeys(keys,None)
#print(d_2)
#内置方法
dic={'name':'egon','age':18}
#print(dic['name'])
#dic['name']='EGON' ##‘EGON’替换为‘egon’
#print(dic)
#dic['gender']='male' #相当于添加,如果有,对应的内容覆盖,如果没有添加
#print(dic)
##长度 len
##成员运算 in 和not in 以字典的key为准
##删除 del pop
dic={'name':'egon','age':18}
• ##删除对应的key和value,删除之后不可找回
#print(dic)
#res=dic.pop('name') ###删除对应的key和value,仅被删除的key可以找回
##print(res)
#print(dic)
#res=dic.popitem() ###随机删除字典的一对key和value,一般删除末尾的,被删的可以找回
#print(dic)
#print(res)
###循环
dic={'name':'egon','age':18}
#for k in dic:
print(k) ##打印的是key的值
#for k in dic.keys(): #打印的key的值
• #print(k)
#for v in dic.values(): ###打印的是value的值
# print(v)
# for k, v in dic.items(): # k,v=('name', 'egon') ##打印的是key和value的值
# print(k,v)
扩展1
# date={
# '肖申克的救赎' : 'Frank Darabont',
# '这个杀手不太冷' : 'Luc Besson',
# '阿甘正传' : 'Robert Zemeckis'
# }
# for name in date:
# print('电影'+name+"的导演是"+date[name])
扩展2:
#列表转字典格式
# s = "k:1|k1:2|k2:3|k3:4",
'''
d = {}
def foo(s):
new_list = s.split('|')
for i in new_list:
s1 = i.split(':')
k,v = s1 # 包的概念,
# a,b,c=1,2,3
# print(a,b,c)
d[k] = int(v)
print(d)
foo(s)
'''
扩展3:
# words = ['apple','book','atom','bat']
# by_letter = {}
# for word in words:
# letter = word[0]
# if letter not in by_letter:
# by_letter[letter] = [word]
# else:
# by_letter[letter].append(word)
# print(by_letter)
setdefault 函数
# for word in words: #简洁方法
# letter = word[0]
# by_letter.setdefault(letter,[]).append(word)
# print(by_letter)
#defaultdict 模块
# from collections import defaultdict
# by_letter = defaultdict(list)
# for word in words:
# by_letter[word[0]].append(word)
# print(by_letter)
#列表类型 []
1,基础
#类型转换
#l=['a','b','c'] #l=list(['a','b','c'])
#l=list('hello')
#print(l)
#l=list({'x':1,'y':2})
#print(l)
#需要掌握的内置方法
#l=['a','b','c','d','e']
#print(l[1])
#print(l[-1])
#l[0]='A' #第一个字母变成A,但是id完全相同
#print(l)
#l[5]='eeeeeee' #转换的内容超过列表里的内容,报错l
#切片
#l=['a','b','c','d','e']
#print(l[1:3:2]) # 1:3选中切割从第2个包括第2个到第3个但不包过第3个的内容,:2是步长,默认步长为1
#长度 len
#l=['a','b','c','d','e']
#print(len(l)) # 输出为5
#追加 append
#l=['a','b','c','d','e']
#l.append('DDDDD') #默认追加最后
#print(l)
#插入 insert
#l=['a','b','c','d','e']
#l.insert(0,'LLLLLL') #从第一项之前开始插入’LLLLLL'
#print(l)
#删除 del remove pop
#l=['a','b','c','d','e']
#del l[1] #删除l的第二项,不输入内容默认删除全部,内容删除全部后查找为错误
#print(l)
#res=l.remove('b') # 移动确定的内容‘b',而不是按次序删除。内容被移除显示为None
#print(1)
#print(res)
#res=l.pop(1) #移动按次序查找的内容,内容被移除之后可以继续显示为本身
#print(res)
#print(l)
#循环
for.. in ...:
#l=['a','b','c','d','e']
#for item in l: # for in 循环
print(item)
列表生成式
# names=['egon','alex_sb','kevin_sb']
# print([name for name in names if name.endswith('sb')])
# print([name.upper() for name in names if name.endswith('sb')])
扩展1:
#列表嵌套推导式
# all_data= [['egon','alex','kevin'],['huxx','jix','wang']]
# a = [name for names in all_data for name in names if len(name) > 3] #最底层的嵌套写在最后面
# print(a)
# tuples = [(1,2,3),(4,5,6),(7,8,9)]
# a = [x for names in tuples for x in names]
# print(a)
# print([[x for x in names] for names in tuples]) #分析语法也是很重要的
#如果有三个及以上的嵌套,就要考虑可读性的问题了
扩展2: bisect
# import bisect
# a = [1,0,3,4,5,6,6,6,7,7]
# res = bisect.bisect(a,0) #查找0插入的位置而不会插入,
# res_1 = bisect.bisect(a,1)
# print(a)
# print(res)
# print(res_1)
扩展3:
zip函数
# a=[1,2,3]
# b=[4,5,6]
# c=zip(a,b)
# print(list(c)) #对应生成组合
# d=[7,8]
# print(list(zip(a,b,d))) #取决于最短的那一组
zip函数和enumerate函数j结合
# a=[1,2,3]
# b=[4,5,6]
# for i ,(k,v) in enumerate(zip(a,b)):
# print(i,(k,v))
# for i, k in enumerate(zip(a, b)): #效果一样,不会报错
# print(i,k)
# for i ,k in enumerate(zip(a,b)): #加个冒号
# print('{0}:{1}'.format(i,k))
# a=[(1,2),(3,4),(5,6)]
# b,c = zip(*a) #相当于线性代数的列概念
# print(b,c)
#reversed函数 #生成器,反排序
print(list(reversed(range(10))))