python数据类型之字典
数据类型—字典dict
特性:无序,key-value的结构存储数据,查找速度快
key必须是可hash数据类型,且是唯一的,value可以是任意的。
官方帮助文档
- Help on class dict in module builtins:
- class dict(object)
- | dict() -> new empty dictionary
- | dict(mapping) -> new dictionary initialized from a mapping object's
- | (key, value) pairs
- | dict(iterable) -> new dictionary initialized as if via:
- | d = {}
- | for k, v in iterable:
- | d[k] = v
- | dict(**kwargs) -> new dictionary initialized with the name=value pairs
- | in the keyword argument list. For example: dict(one=1, two=2)
- |
- | Methods defined here:
- |
- | clear(...)
- | D.clear() -> None. Remove all items from D.
- |
- | copy(...)
- | D.copy() -> a shallow copy of D
- |
- | fromkeys(iterable, value=None, /) from builtins.type
- | Returns a new dict with keys from iterable and values equal to value.
- |
- | get(...)
- | D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
- |
- | items(...)
- | D.items() -> a set-like object providing a view on D's items
- |
- | keys(...)
- | D.keys() -> a set-like object providing a view on D's keys
- |
- | pop(...)
- | D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
- | If key is not found, d is returned if given, otherwise KeyError is raised
- |
- | popitem(...)
- | D.popitem() -> (k, v), remove and return some (key, value) pair as a
- | 2-tuple; but raise KeyError if D is empty.
- |
- | setdefault(...)
- | D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
- |
- | update(...)
- | D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
- | If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
- | If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
- | In either case, this is followed by: for k in F: D[k] = F[k]
- |
- | values(...)
- | D.values() -> an object providing a view on D's values
- |
- | ----------------------------------------------------------------------
- | Data and other attributes defined here:
- |
- | __hash__ = None
创建字典
字典的key必须是不可数据类型、且必须是唯一的
class dict(object)
| dict() -> new empty dictionary
| dict(mapping) -> new dictionary initialized from a mapping object's
| (key, value) pairs
| dict(iterable) -> new dictionary initialized as if via:
| d = {}
| for k, v in iterable:
| d[k] = v
| dict(**kwargs) -> new dictionary initialized with the name=value
直接创建
>>> a = {'name':'james','age':25}
>>> a
{'name': 'james', 'age': 25}
通过dict创建
>>> a = ('name','alex'),('age', 38)
>>> a
(('name', 'alex'), ('age', 38))
>>> dict(a)
{'name': 'alex', 'age': 38}
关键字创建
>>> dict(name = 'alex',age = 38)
{'name': 'alex', 'age': 38}
字典的方法
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
增加
- 存在就覆盖,不存在就覆盖
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'high'] = 175 # 不存在key = 'high'才新增,如果存在就是覆盖 dic1[
- dic1
- {'name': 'james', 'age': 18, 'sex': 'male', 'high': 175}
- dic1.setdefalut(key,value) # 字典中存在key,不做任何改变,不存在就新增,value不指定时默认为None
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- "name",'JAMES') # 字典中存在key为'name'的键值对,直接返回key对应的值,字典没有改变 dic1.setdefault(
- 'james'
- dic1
- {'name': 'james', 'age': 18, 'sex': 'male'}
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'weight',130) # 字典中不存在key = 'weight',就新增进去,返回value dic1.setdefault(
- 130
- dic1
- {'name': 'james', 'age': 18, 'sex': 'male', 'weight': 130}
删除
- dic1.pop(key,x)
- 指定key值删除,如果key存在,返回key对应的value,x缺失的情况下,key不存在会报错。指定x,key不存在返回x,不会报错。
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'age') # 不指定x,key存在返回key的value dic1.pop(
- dic1
- {'name': 'james', 'sex': 'male'}
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- "high") # 不指定x,key不存在报错 dic1.pop(
- Traceback (most recent call last):
- File "<pyshell#24>", line 1, in <module>
- dic1.pop("high")
- KeyError: 'high'
- 如果指定了x,key不存在时,直接返回x;如果指定x,key存在就直接返回key对应的value(可设置返回值x)
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- "high",178) dic1.pop(
- dic1.popitem() # 随机删除,有返回值,返回以元组形式的键值。
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- dic1.popitem()
- ('sex', 'male')
- del dic1.[key] # 按照指定的key删除键值,没有返回值,如果key不存在会报错
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- del dic1.['heigh']
- SyntaxError: invalid syntax
- del dic1 # 直接删除字典
- dic1.clear() #清空列表
修改
- 赋值修改
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'name'] = 'JAMES' # 直接对指定的key值对应的value进行赋值修改 dic1[
- dic1
- {'name': 'JAMES', 'age': 18, 'sex': 'male'}
- dic1.update(dic2) # 更新
- 把dic2的键值对更新到dic1中,相同key值的,覆盖掉dic1中的value,dic1中的没有的key,新增进去
- dic1法生改变,dic2不发生改变
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'name':'tony','heigh':178} dic2 = {
- dic1.update(dic2)
- dic1
- {'name': 'tony', 'age': 18, 'sex': 'male', 'heigh': 178}
- dic2
- {'name': 'tony', 'heigh': 178}
查询
- 第一种:dic1[key] 按照指定的key,找出对应的value,如果key不存在,会报错
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'name'] dic1[
- 'james'
- 'high'] dic1[
- Traceback (most recent call last):
- File "<pyshell#43>", line 1, in <module>
- dic1['high']
- KeyError: 'high'
- 第二种:dic1.get(key,x) 查找对应键的值,可设置返回值,x默认是None
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'name') # 如果存在返回对应的value dic1.get(
- 'james'
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- 'heigh','不存在') # 如果key不存在,返回x指定的值,x为空默认返回None dic1.get(
- '不存在'
- dic1.keys() 返回字典里面的全部key,以列表的形式返回
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- dic1.keys()
- dict_keys(['name', 'age', 'sex'])
- dic1.values() 返回字典里面的全部value,以列表的形式返回
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- dic1.values()
- dict_values(['james', 18, 'male'])
- dic1.items() 把字典的键和值放进元组,以列表的形式返回
- 'name':'james', 'age':18, 'sex':'male'} dic1 = {
- dic1.items()
- dict_items([('name', 'james'), ('age', 18), ('sex', 'male')])
字典的其他方法
fromkeys(iterable, value=None, /) method of builtins.type instance
Returns a new dict with keys from iterable and values equal to value.
- 'name' a =
- dict.fromkeys(a)
- {'n': None, 'a': None, 'm': None, 'e': None}
- 21,22,23] b = [
- dict.fromkeys(a,b)
- {'n': [21, 22, 23], 'a': [21, 22, 23], 'm': [21, 22, 23], 'e': [21, 22, 23]}
复制
copy(...) method of builtins.dict instance
D.copy() -> a shallow copy of D
查看链接
字典的循环
>>> for index,k in enumerate(a):
print(index,k)
0 name
1 age
2 sex
>>> for k in a:
print(k,a[k])
name peiqi
age 38
sex male