【Python】字典dict

字典特点
  • {}来表示,按照key:value来表示字典中的元素,其中key是键,value是值,key-value就是键值对。同样的,可以申明一个字典变量。
fruit = {"apple":1,"pear":2,"orange":3}
print(fruit) # 结果为:{'apple': 1, 'pear': 2, 'orange': 3}
  • 键值对,必须共同出现,不能只有一个
  • key必须是字符换,value可以是任意对象,同理list(数值,字符串,序列,字典)
  • 字典是一个无序集合。序列由于没有key来做对应,所以以顺序来对应值。序列有顺序,字典没有!
  • key是唯一的。
dic = {'a':1,'a':2}
print(dic) #结果为:{'a': 2}

dic1 = {'a':1,'b':2}
dic2 = {'b':22,'c':3}
dic1.update(dic2) # 合并字典
print(dic1) #结果为:{'a': 1, 'b': 22, 'c': 3}
  • 可以任意添加、删减元素;可以嵌套,也就是字典就包含字典。
dic1 = {'a':1,'b':2}
del dic1['a']
print(dic1) #结果为:{'b': 2}
申明字典
  • 最简单的方式
dic = {'a':1,'b':2}
  • dict()函数
a = dict(m=10,n="aa",h=100) #等号前不需要加引号
print(a) #结果为:{'m': 10, 'n': 'aa', 'h': 100}
  • 由序列生产一个字典
lst = [('a','f'),('b','ggg')]
lst2 = [['a','f'],['b','ggg']]
lst3 = (('a','f'),('b','ggg'))

dict(lst) #结果为:{'a': 'f', 'b': 'ggg'}
dict(lst2) #结果为:{'a': 'f', 'b': 'ggg'}
dict(lst3) #结果为:{'a': 'f', 'b': 'ggg'}
  • 只有key的列表下,直接生产字典
keys = ['a','b','c']
m = dict.fromkeys(keys)
print(m) #结果为:{'a': None, 'b': None, 'c': None}
m['a'] = 1
print(m) #结果为:{'a': 1, 'b': None, 'c': None}
元素访问及遍历
  • 判断是否包含一个key,同list。
    key in/not in dict
m = {'a':1,'b':2,'c':3}
'b' in m #结果为:True
'd' in m #结果为:False
'd' not in m #结果为:True
  • 查看一个元素的value:用key做指向,核心-key必须存在。
m = {'a':1,'b':2,'c':3}
n = m['a']
print(n) #结果为:1
  • 嵌套字典的元素value查找
poi = {'name':'shop','city':'shanghai','information':{'address':'somewhere','num':123456}}
print(poi['information']['address']) #结果为:somewhere
  • 使用get函数查找元素的value
m = {'a':1,'b':2,'c':3}
n = m.get('a')
print(n) #结果为:1
n = m.get('d','no-key')
print(n) #结果为:no-key
  • 返回全部字典key。
    dict.key()type查看,输出的是视图,可以用list()得到key的列表。
m = {'a':1,'b':2,'c':3}   
n = m.keys()
print(n) #结果为:dict_keys(['a', 'b', 'c'])
type(n) #结果为:dict_keys
k = list(m.keys())
print(k) #结果为:['a', 'b', 'c']
type(k) #结果为:list
  • 返回字典的全部元素
    dict.items()type查看,输出的是视图,可以用list()得到键值对的列表。
m = {'a':1,'b':2,'c':3}   
n = m.items()   
print(n) #结果为:dict_items([('a', 1), ('b', 2), ('c', 3)])
type(n) #结果为:dict_items
k = list(m.items())
print(k) #结果为:[('a', 1), ('b', 2), ('c', 3)]
type(k) #结果为:list
  • 遍历所有key、value
m = {'a':1,'b':2,'c':3}  
for i in m.keys():
    print(i) #结果为:a\nb\nc
    
for i in m.values():
    print(i) #结果为:1\n2\n3
  • 遍历所有items
m = {'a':1,'b':2,'c':3}  
for (k,v) in m.items():
    print("{}-{}".format(k,v)) #结果为:a-1\nb-2\nc-3
字典通用操作
  • 修改一个值
    dict[key] = newvalue

  • 删除一个值
    del dict[key]

  • 更新/合并一个键值对
    dict1.update(dict2)注意,dict2字典合并到dict1中

  • 字典复制
    dict.copy()
    m = dicm和dic指向同一个字典

  • 弹出值
    dict.pop(key)
    dict.pop(key,'no-key')

  • 弹出整个键值
    dict.popitem()

  • dict和list另一个不同,value不仅仅可以包含任何数据类型,也可以包含行为:函数

def a() :
    print("apple pie")

dic = {'fun':a}
dic['fun']() #结果为:apple pie

dic = {'fun':a()} #直接出结果为:apple pie
  • 字典里,用方法的时候使用(),访问对象时、删除时使用[]
练习

随机新建一个字典结构,key包含姓名,学号,成绩,新建3个学生的字典,并组成字典列表。

st1 = {"姓名":"小明","学号":"001","成绩":93}      
st2 = {"姓名":"小红","学号":"002","成绩":90}       
st3 = {"姓名":"小丽","学号":"003","成绩":69}               
m = [st1,st2,st3]      
print(m)       

#################################

name = ["小明","小红","小丽"]   
num = ["001","002","003"] 
score = [90,80,87]   

k = {"姓名","学号","成绩"}
st1 = dict.fromkeys(k)
st = [st1,st1.copy(),st1.copy()]       

for i in st:
    n = st.index(i)       
    i["姓名"] = name[n]
    i["学号"] = num[n]
    i["成绩"] = score[n]
print(st)       

你可能感兴趣的:(【Python】字典dict)