python基础

一、字典 dict

1.字典初识

why:

        列表的缺点:

            1,列表如果存储的数据比较多,那么他的查询速度相对慢。

            2,列表存储的数据关联性不强。

    what: python基础数据类型之一:字典。

        python中唯一的映射类的数据,花括号{}括起来,他是以键值对形式存储,每一对键值对以逗号隔开的。

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

        ps:

            数据类型的划分:

                容器非容器划分:

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

                    非容器型数据类型:int str bool

                可变与不可变划分:

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

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

                                        对数据本身变化:

                                        i = 100

                                        i = 90

                                        print(i)

        字典是以键值对形式存储的,

        键:不重复的,唯一的,键的数据类型必须是不可变的数据类型。

        值:任意数据类型,对象。

        字典可以存储大量的键值对数据,

        python3.5包括3.5之前:字典是无序的。

        python3.6之后,字典变成有序的。

        字典的优点:

            1,字典存储大量的关系型数据。

            2,字典的查询速度非常快。

       缺点: 占用空间比较大

    how:

    where:

2. 字典的常用操作方法

     例:    dic = {    'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'} 

         (1)增

dic = {    'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'}
#(1)直接增加,有则替换,无则增加
dic['hight'] = 173
print(dic)
dic['age'] = 22
print(dic)
#(2)dic.setdefault  有则不变,无则增加
# dic.setdefault('weight')   #{'name': 'xiaoxu', 'age': 22, 'hobby': 'sing', 'hight': 173, 'weight': None}
dic.setdefault('weight',120) #{'name': 'xiaoxu', 'age': 22, 'hobby': 'sing', 'hight': 173, 'weight': 120}
dic.setdefault('name','帅哥')#{'name': 'xiaoxu', 'age': 22, 'hobby': 'sing', 'hight': 173, 'weight': 120}
print(dic)
View Code

        (2) 删

dic = {    'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'}
#(1)pop 按照键删除  有返回值
# dic.pop('age')    # 按照键删除掉键值对
# print(dic)        #{'name': 'xiaoxu', 'hobby': 'sing'}
# dic.pop('age1')
# print(dic)      #没有‘age1’,会报错
# dic.pop('age1',None)      # 设置两个参数,第二个参数是提示语 一般设置成None
# print(dic)                #有返回值,不会报错
#(3)clear  清空
# dic.clear()
# print(dic)              #{}
#(4)popitem  (随机删除然后返回)但3.6版本之后就是删除最后一个键值对
# dic.popitem()
# print(dic)      #{'name': 'xiaoxu', 'age': 23} 删掉了 hobby :sing
#(5) del
# del dic['name']    # 按照键删除
# print(dic)         #{'age': 23, 'hobby': 'sing'}
# del dic['name1']
# print(dic)           #会报错,所以按照键删除,用 pop。
# del  dic      #删除字典
# print(dic)    #NameError: name 'dic' is not defined
View Code

       (3)改

 dic = {    'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'}   
#(2)update 添加
# dic.update(car='逍客', money=1300)
# print(dic)
dic = {"name": "jin", "age": 18, "sex": "man"}
dic2 = {"name": "alex", "weight": 75}
dic2.update(dic)   # 将dic里面的键值对覆盖添加到dic2中
print(dic)         # {'name': 'jin', 'age': 18, 'sex': 'man'}
print(dic2)        # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'man'}
View Code

        (4)查

# (1)按照键查
print(dic['age'])
print(dic['age1'])  #没有会报错
# (2)get
print(dic.get('age'))
print(dic.get('age1'))   #没有输出   None
print(dic.get('age1', '没有此键'))    #可以设置返回值   输出结果 : “没有此键”
View Code

         (5)

         dic.keys()      输出键   #输出结果是 类似于list的容器类类型

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
dic.keys()     
ret = dic.keys()
print(ret, type(ret))  #dict_keys(['name', 'age', 'hobby']) <class 'dict_keys'>
for key in ret:
    print(key)     #结果 :name  age  hobby

print(ret[0])    #报错,key 没有索引   TypeError: 'dict_keys' object does not support indexing。
# 可以转化成list
print(list(ret))
View Code

          dic.values()   输出值

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

#可以转换list
print(list(dic.values()))
View Code

        dic.items()    输出键值对

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

for i in dic.items():
    print(i)
View Code

      (6)分别赋值

a, b = (1, 2)
print(a,b)
a, b= (1, 2, 3)   # 必须一一对应
print(a,b)   # 报错     ValueError: too many values to unpack (expected 2)
a, b, c = (1, 2, 3)
print(a,b,c)
a, b = 100, 1000
a, b = [100, 1000]
a, b = {'name':'alex', 'age': 73}
print(a,b)      #只会输出键    name age
View Code

       例:面试题 

                          a = 18

                          b = 32

                         通过一行代码 将a,b的值互换。

a = 18
b = 32
a, b = b, a
print(a,b)
View Code

   

dic = {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
print(dic.items())
for k,v in dic.items():
    '''
    k,v =     ('name', '太白金星')
    k,v =     ('age', 18)
    k,v =     ('hobby', 'wife')
    '''
    print('这是键:', k)
    print('这是值:', v)
View Code

3.列表的嵌套

   例  :

dic = {

    'name_list': ['博哥', '菊哥', 'b哥', 'alex'],

    'barry': {

        'name': '太白金星',

        'age': 18,

        'hobby': 'wife',

    }

}

  1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。

dic = {
    'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
    'barry': {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
}
l1 = dic['name_list']
# print(l1)
l1.append('老男孩')
print(dic)
View Code
dic = {
    'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
    'barry': {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
}
dic['name_list'].append('老男孩')
print(dic)

2,将这个列表['博哥', '菊哥', 'b', 'alex']中的alex变成首字母大写。

dic = {
    'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
    'barry': {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
}
print(dic['name_list'][-1].capitalize())
dic['name_list'][-1] = dic['name_list'][-1].capitalize()
print(dic)
View Code

3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。

dic = {
    'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
    'barry': {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
}
print(dic['barry'])
dic['barry']['name'] = '男神'
print(dic)
View Code

4,给barry对应的小字典增加一个键值对: weight: 160

dic = {
    'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
    'barry': {
        'name': '太白金星',
        'age': 18,
        'hobby': 'wife',
    }
}
dic['barry']['weight'] = 150
print(dic)
View Code
原文地址:https://www.cnblogs.com/Xiao_Xu/p/10483020.html