字典可以存储任意类型的对象,字典中的数据存储形式是:每一个键key对应一个值value,键是唯一的,但是值可以相同。字典用{}来表示,如:
d = {"name":"Tom","Age":10,"hobby":"swimming"}
1、键不可变,可使用数字、字符串或元组充当,但是不能使用列表作为键值。
如:
d1 = {'1':20}
d2 = {(2,):30}
print(d1['1'],d2[(2,)])
输出
20 30
如果下面这样定义:
d3 = {[2]:40}
print(d3[[2]])
此时会出错:
TypeError: unhashable type: 'list'
2、值可变,可以对键对应的值进行修改。
索引字典中的值
#创建字典
d = {"name":"Tom","Age":10,"hobby":"swimming"}
#索引
print(d)
print(d["name"],d["Age"])
输出
'name': 'Tom', 'Age': 10, 'hobby': 'swimming'}
Tom 10
修改字典中的值
#修改字典中的值
d["Name"] = "Alex"
d["Age"] = 20
print("修改后的值为:",d["Name"],d["Age"])
输出:
修改后的值为: Alex 20
字典中内置函数
len() 字典长度
str() 输出字典以打印的字符串表示
type() 返回类型
字典中内置方法
方法 | A说明 |
---|---|
d.clear() | 清空字典,所有元素 |
d.copy() | 浅拷贝字典 |
d.fromkeys | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
d.get(key,default=None) | 返回指定键的值,如果值不在字典中返回default值 |
dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
key in d | 如果键在字典dict里返回true,否则返回false |
d.items() | 以列表返回可遍历的(键, 值) 元组数组 |
d.keys() | 返回一个迭代器,可以使用 list() 来转换为列表 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
d.update(dict2) | 把字典dict2的键/值对更新到dict里 |
d.values() | 返回一个迭代器,可以使用 list() 来转换为列表 |
d.pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
d.popitem() | 随机返回并删除字典中的一对键和值(一般删除末尾对)。 |
d.clear()
dict1= {'name':'Thea','age':13}
print("原字典:",dict1)
#清空字典
dict1.clear()
print("新字典:",dict1)
输出
原字典: {'name': 'Thea', 'age': 13}
新字典: {}
d.copy 浅拷贝
复制与浅拷贝的区别:
复制相当于引用,即给原字典起了一个别名,而浅拷贝是,对一级目录直接拷贝,不会改变,而对二级目录是浅拷贝,只是引用。
#浅拷贝copy
Alex = [12,'sing']
Thea = [20,'dance']
dict1= {'Alex':Alex,'Thea':Thea}
dict_cp1 = dict1
dict_cp2 = dict1.copy()
dict1['Alex']= Thea
print("这是字典dict1:",dict_cp1)
print("复制 字典dict1:",dict_cp1)
print("浅拷贝 字典dict1,不会随着原字典改变:",dict_cp2)
输出:
这是字典dict1: {'Alex': [20, 'dance'], 'Thea': [20, 'dance']}
复制 字典dict1: {'Alex': [20, 'dance'], 'Thea': [20, 'dance']}
浅拷贝 字典dict1,不会随着原字典改变: {'Alex': [12, 'sing'], 'Thea': [20, 'dance']}
d.fromkeys()
#从列表中获取键值创建列表
key_list =["name","age","hobby"]
val = "test"
d= {}
#不指定值
d = d.fromkeys(key_list)
print("新字典",d)
#指定值
d = d.fromkeys(key_list,val)
print("新字典",d)
输出
新字典 {'name': None, 'age': None, 'hobby': None}
新字典 {'name': 'test', 'age': 'test', 'hobby': 'test'}
dict.get(key, default=None)
dict1= {'name':'Thea','age':13}
print("获取键值:",dict1.get('name'))
print("获取键值不存在时返回:",dict1.get('hh'))
key in d
#key in d 返回true或false
dict1= {'name':'Thea','age':13}
print('name' in dict1)
#返回键值元组
print("返回键值元组:",dict1.items())
输出
True
返回键值元组: dict_items([('name', 'Thea'), ('age', 13)])
d.keys()
#返回迭代器,转为一个列表
dict1= {'name':'Thea','age':13}
print(list(dict1.keys()))
输出
['name', 'age']
dict.setdefault(key, default=None)
print("原字典:",dict1)
print("返回'name'的值:",dict1.setdefault('name',None))
print("不存在的键,可以添加,默认值:",dict1.setdefault('gender','man'))
print("新字典:",dict1)
输出:
原字典: {'name': 'Thea', 'age': 13}
返回'name'的值: Thea
不存在的键,可以添加,默认值: man
新字典: {'name': 'Thea', 'age': 13, 'gender': 'man'}
dict1.update()
#dict1.update()将dict1中的键值更新到dict2中
dict1= {'name':'Thea','age':13}
dict2= {}
print("更新后的dict2",dict2.update(dict1))
输出:
更新后的dict2 {'name': 'Thea', 'age': 13}
d.values
#d.values 返回迭代器
print("返回一个迭代器:可以转为列表:",list(dict1.values()))
输出:
返回一个迭代器:可以转为列表: ['Thea', 13]
pop() 和popitem()
#删除键值,返回被删除的键对应的值
print("返回被删除的键对应的值:",dict1.pop('age'))
#随机删除一对键值,一般从结尾删
dict1= {'name':'Thea','age':13}
print("随机删除字典中的一对键值,返回被删除的键值:",dict1.popitem())
print("随机删除键值的字典:",dict1)
输出:
返回被删除的键对应的值: 13
随机删除字典中的一对键值,返回被删除的键值: ('age', 13)
随机删除键值的字典: {'name': 'Thea'}