字典是python中的唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,例如:数字、字符串、元组。
字典是python中除列表以外最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者区别:字典中的元素是通过键来存取的,而不是通过偏移存取。
(能用作键)不可变类型:整型,字符串,元组
(不能用作键)可变类型:列表,字典
1.新建字典
dic1 = {333:'333str', 'strsss': ('y元组1', 'hhhhh'), ('Mac', 90000):123123}
print(dic1)#{333: '333str', 'strsss': ('y元组1', 'hhhhh'), ('Mac', 90000): 123123
dic2 =dict(((0, 33), ('sss', 'dhsjh')))
print(dic2)#{0: 33, 'sss': 'dhsjh'}
2.增加字典元素
dic3 = {}
dic3['name'] ='what is your name'
print(dic3)#{'name': 'what is your name'}
dic3['age'] =33
# dic3['age'] = input("shurunianling :")
print(dic3)#{'name': 'what is your name', 'age': 33}
newv = dic3.setdefault('kkk', 333)# 假如原来没有这个值,那么增加新的键值对,返回这个键值对的值
print(newv)#333
print(dic3)#{'name': 'what is your name', 'age': 33, 'kkk': 333}
yuanlaiv = dic3.setdefault('kkk', 3333333)# 假如原来有这个值,那么不会改动原来的值,但是返回一个原来的值
print(yuanlaiv)#333
print(dic3)#{'name': 'what is your name', 'age': 33, 'kkk': 333}
3.# 查 通过键取查找
dic4 = {'a':1, "b":True, "c":"ccc"}
print(dic4["a"])#1
print(list(dic4.keys()))#['a', 'b', 'c']
print(list(dic4.values()))#[1, True, 'ccc']
print(list(dic4.items()))#[('a', 1), ('b', True), ('c', 'ccc')]
4.# 改 跟列表一样
dic5 = {'a':1, "b":True, "c":"ccc", "d":"ddddd"}
dic5['b'] ="dddd"
print(dic5)#{'a': 1, 'b': 'dddd', 'c': 'ccc', 'd': 'ddddd'}
dic4.update(dic5)# 把dic5中的键值对全部加入到dic4中,如果有相同的key,那么覆盖,如果没有则添加
print(dic4)#{'a': 1, 'b': 'dddd', 'c': 'ccc', 'd': 'ddddd'}
print(dic5)#{'a': 1, 'b': 'dddd', 'c': 'ccc', 'd': 'ddddd'}
5# 删
dic6 = {'a':"a", "b":"b", "c":"ccc", "d":"ddddd"}
# del dic6['a'] #删除指定项
# del dic6#删除整个字典
# print(dic6)#{'b': 'b', 'c': 'ccc', 'd': 'ddddd'}
# dic6.clear() #清空
# print(dic6)#{}
# pops = dic6.pop('c')#删除指定的键值对,返回改键值对的值
# print(pops) # ccc
# print(dic6) # {'a': 'a', 'b': 'b', 'd': 'ddddd'}
# popitems = dic6.popitem()#随机删除某组键值对,并以元组方式返回值
# print(popitems) # 随机删除 ('d', 'ddddd')
# print(dic6) # {'a': 'a', 'b': 'b', 'c': 'ccc'}
6# dict.fromkeys 新建字典,
dic7 =dict.fromkeys(['c1', 'c2', 'c3'], 'aaaaaa')
print(dic7)
# 问题:
dic7['c2'] ="sdfajdfj"
print(dic7)# 正常情况
dic7 =dict.fromkeys(['c1', 'c2', 'c3'], ['aaaaaa', 'bbb'])
print(dic7)
dic7['c2'][1] ='只是改变c2中的bbb就好了'
print(
dic7)# 全部修改了,{'c1': ['aaaaaa', '只是改变c2中的bbb就好了'], 'c2': ['aaaaaa', '只是改变c2中的bbb就好了'], 'c3': ['aaaaaa', '只是改变c2中的bbb就好了']}
7# 排序
print(sorted(dic7))#
8遍历
dic8 = {'a':"a", "b":"b", "c":"ccc", "d":"ddddd"}
for iin dic8:
print(i)# 默认返回的键
第二种方法:
for k, vin dic8.items():
print(k, v)# 效率低,不推荐使用