一、字典

  列表虽然可以存储大量的数据,但由于采用索引查找,查询的速度相对较慢;同时列表的存储的数据的关联性并不强。这时,我们就要引入字典。

  字典是python里唯一的映射类的数据类型,用{}括起来,它以键值对的形式存储。每一对的键值对间用逗号隔开。如:

{'name': '太白金星', 'age': 18, 'sex': 'man'}

  python的数据类型的分类可以分为:

  容器非容器的划分:

    容器类数据类型:list,tuple,dict,set

    非容器类数据类型:int,str,bool
  可变与不可变划分:

    可变(不可哈希hash)的数据类型:list,dict,set

    不可变(可哈希hash)的数据类型:int,bool,str,tuple

键值对里的键在字典里是唯一的不可重复的,键的数据类型必须是不可变的数据类型。值可以是任意的数据类型。字典可以做到存储大量的关联性的数据,而且可以快速查询。字典在python3.6之前是无序的,但从python3.6开始字典就变成有序的了,顺序为放入字典的先后顺序。

  字典的常用的方法如下:

1、增

  直接用“ dic[键]  =  元素 ”的形式。如果列表里有这个键则将原来的元素替换,若没有就直接添加。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
dic['hight'] = 176
print(dic)
View Code

  还可以采用“ dic.setdefault(键,元素) ”的形式。如果列表里有这个键则不变,若没有就添加。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
dic.setdefault('weight',160)
print(dic)
View Code

2、删

  用dic.pop(键)按照键来删除。pop指令有返回值,若是列表里没有这个键,默认情况下会报错,可以自定义返回值。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
ret = dic.pop('age')
ret = dic.pop('age1', '没有此键')
print(ret)
print(dic)
View Code

  dic.clear()的方法可以将字典清空,代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
dic.clear()
print(dic)
View Code

  dic.popitem()在python3.6之前是随机删除,自python3.6变成删除最后一个键值对。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
ret = dic.popitem()
print(ret)
print(dic)
View Code

  del dic[键]可以按照键删除键值对,字典里没有这个键会报错,也可以用del dic将整个字典删除。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
del dic['name'] 
print(dic)
del dic
print(dic)
View Code

3,、改

  可采用“ dic[键]  =  元素 ”的方法,代码见增的第一个方法。

  可采用dic.update(键值对,键值对)或者dic2.update(字典),加入另一个字典时键相同的会覆盖入dic2里。代码如下:

dic = {"name": "jin", "age": 18, "sex": "male"}
dic2 = {"name": "alex", "weight": 75}
dic.update(car='逍客', money=1300)
dic2.update(dic)
print(dic) 
print(dic2)
View Code

4、查

  可用dic[键]的方法查询,但若字典里没有此键会报错,不推荐。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
print(dic['age'])
View Code

  可用dic.get(键)的方法查询,字典里没有该键会返回None,也可以自定义返回值。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
print(dic.get('age'))
print(dic.get('age1', '没有此键'))
View Code

   可以用for循环遍历。代码如下:

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
for i in dic:
    print(i)
View Code

5、其他用法:

  dic.keys()可以将字典里的键取出来,并且可以将其转化为列表。代码如下:

dic = {
    'name': '太白金星',
    'age': 18,
    'hobby': 'wife',
}
ret = dic.keys()
print(ret, type(ret))
View Code

  dic.values()可以将字典里的值取出来,并且可以将其转化为列表。代码如下:

dic = {
    'name': '太白金星',
    'age': 18,
    'hobby': 'wife',
}
print(dic.values())
print(list(dic.values()))
View Code

  dic.items()可以将字典里的键值对取出来,并且可以将其转化为列表。代码如下:

dic = {
    'name': '太白金星',
    'age': 18,
    'hobby': 'wife',
}
print(dic.items())
print(list(dic.items()))
View Code

二、字典的嵌套

  dic[一级键][二级键]...[n级键] = 元素,目标元素在几级字典就要输到几级键。代码如下:

dic = {
    'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
    'barry': {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
}

# 1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。
l1 = dic['name_list']
print(l1)
l1.append('老男孩')
print(dic)

# 简写;
dic['name_list'].append('老男孩')
print(dic)
# 2,将这个列表['博哥', '菊哥', 'b哥', 'alex']中的alex变成首字母大写。
print(dic['name_list'][-1].capitalize())
dic['name_list'][-1] = dic['name_list'][-1].capitalize()
print(dic)
# 3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。
先通过dic 找到小字典
print(dic['barry'])
在通过小字典将name 对应的值更改
dic['barry']['name'] = '男神'
print(dic)
# 4,给barry对应的小字典增加一个键值对: weight: 160
dic['barry']['weight'] = 150
print(dic)
View Code