字典类型
-
-
字典的定义方式: 中括号里面key: values多对值由逗号分隔
>>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']} >>> my_dict {'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']} # 字典的嵌套定义 (字典可以多层嵌套) >>> my_dict = { 'name': 'dinghao', 'age': '23', 'like': { 'play': ['电脑','游戏'], 'look': '三国演义', }, }
# 找出我喜欢看什么? -
字典中的key是不可变的,不可存储为可变对象,但是values是可以存任意类型的值的
# 可以看到,将key定义为列表,发生了报错 >>> my_dict = {[1]: 'number'} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
-
字典中key是唯一的,不可以重复
>>> my_dict = {'name': 'dingh','name': 'dinghao'} >>> my_dict {'name': 'dinghao'} # 这里定义了两个一样key值,后面定义的将前面的覆盖了,所以key是唯一的
-
-
字典的操作
-
字典的读取: 通过key值读取values
>>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']} >>> my_dict['name'] 'dinghao' >>> my_dict['like'][0] '学习' # 还可以通过字典的内置方法去调用 >>> my_dict.keys()# 获取到字典的所有key dict_keys(['name', 'age', 'like']) >>> for key in my_dict.keys():# 通过for循环获取 ... print(key) ... name age like >>> my_dict.values()# 获取到字典的所有values dict_values(['dinghao', 23, ['学习', '读书']]) >>> for values in my_dict.values():# 通过for循环获取 ... print(values) ... dinghao 23 ['学习', '读书'] >>> my_dict.items()# 获取到字典的所有key和values dict_items([('name', 'dinghao'), ('age', 23), ('like', ['学习', '读书'])]) >>> for var in my_dict.items():#通过for循环指定单个值,会将key和values组成一个元组赋值 ... print(var) ... ('name', 'dinghao') ('age', 23) ('like', ['学习', '读书']) >>> for key,values in my_dict.items(): #通过for循环指定两个值,会将key和values分别赋值 ... print('%s: %s' % (key,values)) ... name: dinghao age: 23 like: ['学习', '读书']
-
字典其他常用方法
# 先通过dir函数查看一下
-
>>> dir(dict) ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
# 其他常用方法示例
-
my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']} # get# 获取字典的值 >>> my_dict.get('name') 'dinghao' >>> my_dict.get('aaa')# 这里强烈说明一点get方法的好处,如果key不存在时,get方法不会报错 >>> my_dict.get('aaa','key不存在')# 可以指定输出默认值 'key不存在' # update# 修改字典的值 >>> my_dict.update({'name': 'dingh'}) >>> my_dict {'name': 'dingh', 'age': 23, 'like': ['学习', '读书']} # 也可以通过key直接修改字典的values,如果key存在是更改,如果不存在则添加 >>> my_dict['name'] = 'dingh' >>> my_dict {'name': 'dingh', 'age': 23, 'like': ['学习', '读书']} >>> my_dict['sex'] = 'man' >>> my_dict {'name': 'dingh', 'age': 23, 'like': ['学习', '读书'], 'sex': 'man'} # pop# 弹出字典的值并显示对应的values >>> my_dict.pop('name')# 可以看到弹出了name,并显示了key对应的values 'dingh' >>> my_dict {'age': 23, 'like': ['学习', '读书']} >>> my_dict.pop('abc')# 如果key不存在时,则会报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'abc' # popitem随机删除一组key与values,如果字典为空会报错 >>> my_dict.popitem() ('like', ['学习', '读书']) >>> my_dict.popitem() ('age', 23) >>> my_dict.popitem() ('name', 'dinghao') >>> my_dict.popitem() Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'popitem(): dictionary is empty' # clear清空字典 >>> my_dict.clear()# 清空为一个空字典 >>> my_dict {} # del 删除变量及对应的值 >>> del my_dict >>> my_dict Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'my_dict' is not defined # copy 浅拷贝(涉及到深浅拷贝,只拷贝一级的值,一级以上的值不会拷贝) >>> my_dict2 = my_dict.copy() >>> my_dict2 {'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']} # fromkeys # 用于创建新的字典,传递一个可迭代的对象(字符串,列表,字典,元祖)分别作为字典key对应同一个values >>> my_dict = dict.fromkeys('a',[1,2,3,4,5]) >>> my_dict {'a': [1, 2, 3, 4, 5]} >>> my_dict = dict.fromkeys(1,[1,2,3,4,5]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not iterable # setdefault 如果字典中包含给的key,则返回key对应的values,否则返回为key设置的值 >>> my_dict.setdefault('name','你好') 'dingh' >>> my_dict.setdefault('abc','你好') '你好'
-
字典是以键值对的映射关系存储的,通过字典的key读取values,这样取值是非常快的
-
字典的定义方式: 中括号里面key: values多对值由逗号分隔
>>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
>>> my_dict
{'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']}
# 字典的嵌套定义 (字典可以多层嵌套)
>>> my_dict = {
'name': 'dinghao',
'age': '23',
'like': {
'play': ['电脑','游戏'],
'look': '三国演义',
},
}
# 找出我喜欢看什么? -
字典中的key是不可变的,不可存储为可变对象,但是values是可以存任意类型的值的
# 可以看到,将key定义为列表,发生了报错
>>> my_dict = {[1]: 'number'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
-
字典中key是唯一的,不可以重复
>>> my_dict = {'name': 'dingh','name': 'dinghao'}
>>> my_dict
{'name': 'dinghao'}
# 这里定义了两个一样key值,后面定义的将前面的覆盖了,所以key是唯一的
-
-
字典的操作
-
字典的读取: 通过key值读取values
>>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
>>> my_dict['name']
'dinghao'
>>> my_dict['like'][0]
'学习'
# 还可以通过字典的内置方法去调用
>>> my_dict.keys()# 获取到字典的所有key
dict_keys(['name', 'age', 'like'])
>>> for key in my_dict.keys():# 通过for循环获取
... print(key)
...
name
age
like
>>> my_dict.values()# 获取到字典的所有values
dict_values(['dinghao', 23, ['学习', '读书']])
>>> for values in my_dict.values():# 通过for循环获取
... print(values)
...
dinghao
23
['学习', '读书']
>>> my_dict.items()# 获取到字典的所有key和values
dict_items([('name', 'dinghao'), ('age', 23), ('like', ['学习', '读书'])])
>>> for var in my_dict.items():#通过for循环指定单个值,会将key和values组成一个元组赋值
... print(var)
...
('name', 'dinghao')
('age', 23)
('like', ['学习', '读书'])
>>> for key,values in my_dict.items(): #通过for循环指定两个值,会将key和values分别赋值
... print('%s: %s' % (key,values))
...
name: dinghao
age: 23
like: ['学习', '读书'] -
字典其他常用方法
# 先通过dir函数查看一下
>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
# 介绍一下常用的方法
my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
# get# 获取字典的值
>>> my_dict.get('name')
'dinghao'
>>> my_dict.get('aaa')# 这里强烈说明一点get方法的好处,如果key不存在时,get方法不会报错
>>> my_dict.get('aaa','key不存在')# 可以指定输出默认值
'key不存在'
# update# 修改字典的值
>>> my_dict.update({'name': 'dingh'})
>>> my_dict
{'name': 'dingh', 'age': 23, 'like': ['学习', '读书']}
# 也可以通过key直接修改字典的values,如果key存在是更改,如果不存在则添加
>>> my_dict['name'] = 'dingh'
>>> my_dict
{'name': 'dingh', 'age': 23, 'like': ['学习', '读书']}
>>> my_dict['sex'] = 'man'
>>> my_dict
{'name': 'dingh', 'age': 23, 'like': ['学习', '读书'], 'sex': 'man'}
# pop# 弹出字典的值并显示对应的values
>>> my_dict.pop('name')# 可以看到弹出了name,并显示了key对应的values
'dingh'
>>> my_dict
{'age': 23, 'like': ['学习', '读书']}
>>> my_dict.pop('abc')# 如果key不存在时,则会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'abc'
# popitem随机删除一组key与values,如果字典为空会报错
>>> my_dict.popitem()
('like', ['学习', '读书'])
>>> my_dict.popitem()
('age', 23)
>>> my_dict.popitem()
('name', 'dinghao')
>>> my_dict.popitem()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
# clear清空字典
>>> my_dict.clear()# 清空为一个空字典
>>> my_dict
{}
# del 删除变量及对应的值
>>> del my_dict
>>> my_dict
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'my_dict' is not defined
# copy 浅拷贝(涉及到深浅拷贝,只拷贝一级的值,一级以上的值不会拷贝)
>>> my_dict2 = my_dict.copy()
>>> my_dict2
{'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']}
# fromkeys
# 用于创建新的字典,传递一个可迭代的对象(字符串,列表,字典,元祖)分别作为字典key对应同一个values
>>> my_dict = dict.fromkeys('a',[1,2,3,4,5])
>>> my_dict
{'a': [1, 2, 3, 4, 5]}
>>> my_dict = dict.fromkeys(1,[1,2,3,4,5])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
# setdefault 如果字典中包含给的key,则返回key对应的values,否则返回为key设置的值
>>> my_dict.setdefault('name','你好')
'dingh'
>>> my_dict.setdefault('abc','你好')
'你好' -
-