python基础数据类型:dict(字典)和近期知识点总结__005

字典dict

1、数据类型划分:可变数据类型,不可变数据类型

(1)不可变数据类型(可哈希):str、int、bool、元组

(2)可变数据类型(不可哈希):dict、list、set

2、dict:

key必须是不可变数据类型:可哈希,键一般是唯一的,如果重复,会替换前面的,值不需要唯一

value可以是任意数据类型

3、dict优点:

(1)二分查找去查询

(2)存储大量关系型数据

特点:无序的(即没有索引,python3.5之前没有)

扫描二维码关注公众号,回复: 4647877 查看本文章

4、字典是另一种可变容器模型,且存储任意类型的对象

字典的每个键值key==>value对用冒号:分割,每个键值对之间用,逗号分割,整个字典包括在花括号{}中,格式如下:

d = {key1 : value1, key2 : value2 }

5、访问字典中的值(查看)

dict_check = {'age':18,'name':'江河','heigh':170,'weight':140}
# 查看字典中所有的key,以列表形式展示
print(dict_check.keys())  # dict_keys(['age', 'name', 'heigh', 'weight'])

# 查看字典中所有的value,以列表形式展示
print(dict_check.values()) # dict_values([18, '江河', 170, 140])

# 通过items()查的是键和值,返回的是列表,键和值由元组组成
print(dict_check.items()) # dict_items([('age', 18), ('name', '江河'), ('heigh', 170), ('weight', 140)])

# 查看某一个key的值,如果key不存在报错
value = dict_check['name']
print(value)

# 使用get()方法查看值,key不存在,默认返回None
value = dict_check.get('cs')
print(value) # None

# for循环查看字典中所有的键值
dict_check = {'age':18,'name':'江河','heigh':170,'weight':140}
for key,value in dict_check.items():
    print(key,value)

6、字典中键值对的增加操作

dict_check = {'age':18,'name':'江河','heigh':170,'weight':140}
#  如果添加的字典中无相同的键,则添加新的键值对
dict_check['address'] = '北京'
print(dict_check)

#  如果添加的字典中有相同的键,则覆盖之前的值
dict_check['age'] = 20
print(dict_check)

# setdefault()方法由键值对,不做任何改变,没有才添加
dict_check.setdefault('name','jh')
print(dict_check)

dict_check.setdefault('come','来')
print(dict_check)

dict_check.setdefault('hand') # 不添加值,默认是None,有返回值为默认值None
print(dict_check)

7、字典中键值对的删除操作

dict_check = {'age':18,'name':'江河','heigh':170,'weight':140}
# del 删除键值和整个字典
del dict_check['age']
print(dict_check)

dict_check.clear() # 清空字典
print(dict_check)

del dict_check # 删除字典
print(dict_check)

8、字典中键值对的修改操作

dict_check = {'age':18,'name':'江河','heigh':170,'weight':140}
dict_check['age'] = 19
print(dict_check)

dict_check = {'age':18,'name':'江河','heigh':170,'weight':140}
dict_check_1 = {'age_1':10}
dict_check_1.update(dict_check)  # 更新字典
print(dict_check)
print(dict_check_1)

#面试题:用一行代码互换a、b的值
a = 1
b = 2
a,b = b,a
print(a,b)

===========================字典嵌套============================

8、例子:

dic = {
'name': ['alex','wusir','taibai'],
'py9': {
'time': '1213',
'learn_money': 19800,
'addr': 'CBD',
},
'age': 21
}
dic['age'] = 56
dic['name'].append('jianghe')
dic['name'][2] = dic['name'][2].upper()
print(dic)
# {'name': ['alex', 'wusir', 'TAIBAI', 'jianghe'], 'py9': {'time': '1213', 'learn_money': 19800, 'addr': 'CBD'}, 'age': 56}

============================作业==========================

1、有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中, 将小于 66 的值保存至第二个key的值中。即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}

li= [11,22,33,44,55,66,77,88,99,90]
dic = {}
dic_key1 = []
dic_key2 = []
for i in li:
    if i>66:
        dic_key1.append(i)
    else:
        dic_key2.append(i)
dic['k1'] = dic_key1
dic['k2'] = dic_key2
print(dic)

# {'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55, 66]}

2、

购物选择

(1)输出商品列表,用户输入序号,显示用户选中的商品

商品 li = ["手机", "电脑", '鼠标垫', '游艇']

要求:<1>:页面显示 序号 + 商品名称,如:

**手机

**电脑

<2>: 用户输入选择的商品序号,然后打印商品名称

<3>:如果用户输入的商品序号有误,则提示输入有误,并重新输入。

<4>:用户输入Q或者q,退出程序。

while 1:
    li = ["手机", "电脑", '鼠标垫', '游艇']
    for i in li:
        li_1 = li.index(i) + 1  # 求索引index()
        print(('{li_1}\t\t{i}'.format(li_1=li_1, i=i)))  # 格式化输出
    goods_input = input('请输入序号:')
    if goods_input.isdigit():
        goods_input = int(goods_input)
        if goods_input < len(li) and goods_input>0:
            print(li[goods_input-1])
        else:
            print('请输入有效数字')
    elif goods_input.lower() == 'q':
        break
    else:
        print('请输入数字:')

3、购物车(全部)

li = [{'name':'苹果','price':10},
      {'name':'香蕉','price':20},
      {'name':'橘子','price':30},]
shopping_car = {}
print('欢迎光临!')
money = input('查看是否有钱?')
if money.isdigit() and int(money)>0:
    while 1:
        for i,element in enumerate(li):
            print('序号{},商品{},价格{}'.format(i,element['name'],element['price']))
        choose = input('请输入您要购买的商品序号:')
        if choose.isdigit() and int(choose)<len(li):
            num = input('请输入你要购买的商品数量:')
            if num.isdigit() and 1<int(num):
                if li[int(choose)]['price']*int(num) <=int(money):
                    money = int(money) -int(li[int(choose)]['price'])*int(num)
                    if li[int(choose)]['price'] in shopping_car:
                        shopping_car[li[int(choose)]['name']] = shopping_car[li[int(choose)]['name']] + int(num)
                    else:
                        shopping_car[li[int(choose)]['name']] = int(num)
                    print('购物车中商品有{},您的余额为{}'.format(shopping_car,money))
                else:
                    print('没钱,来干嘛!')
                    break
        else:
            print('非序号,请重新输入序号:')
else:
    print('非数字,请输入正确的数字:')

===========================小知识点总结========================================

1、

(1)python2:默认编码方式是ASCII码;python3:默认编码方式utf-8

(2)ASCII:是由字母、数字和特殊字符构成,一个字节=8位bit(每个字母、数字或特殊字符为一个字节)

        unicode:万国码,一开始是16位,两个字节构成

                       现状:32位,4个字节构成(由字母、数字、特殊字符和中文构成)每个字符都是4个字节

         utf-8:unicode的升级版,至少由一个字节构成

                   字母、数字、特殊字符为一个字节

                   中文24位,每个中文3个字节

         gbk:由ascii码演变的,只有中国本土用

                   数字、字母、特殊字符为一个字节

                  中文为2个字节(window默认是gbk)

(3)python2的不同之处:

        如:print('字符串') 和 print '字符串'  两者都可以打印

             xrange()是生成器,python3没有

            raw_input()  # 用户输入

(4)python3:

       print('字符串')   # 可以打印,其他方式错误

       input()   # 用户输入

2、

(1)= 是赋值;== 比较值是否相等;  is 比较(比较的是内存地址)

方法:id(内容)  例子:如

li1 = [1,2,3]
li2 = li1
li3 = li2
print(id(li1),id(li2))   # 内存地址相等
print(li1 is li2)       # True

3、编码:

(1)ASCII码:

A:00000010  8位 一个字节

(2)unicode:

A:00000000 00000001 00000010 00000100 32位  四个字节

中:00000000 00000001 00000010 00000110 32位  四个字节

(3)utf-8

   A :  00100000 8位 一个字节

   中:  00000001 00000010 00000110 24位 三个字节

(4)gbk

   A : 00000110  8位 一个字节

   中: 00000010 00000110 16位 两个字节

(注意:各个编码之间的二进制,是不能相互识别的,会产生乱码

文件的存储、传输,不能用unicode(只能用utf-8、、gbk、gb2312、ascii等))

4、python3

(1)str 在内存中是用unicode编码

(2)bytes类型

                对于英文:

                                   str:表现形式:s = 'alex'

                                           编码形式:010101010  unicode

                              bytes:表现形式:s = b'alex'

                                          编码形式:000101010  utf-8、gbk等

                对于中文:

                                   str:表现形式:s = '中国'

                                           编码形式:010101010  unicode

                              bytes:表现形式:s = b'x\e91\e91\e01\e21\e31\e32'

                                          编码形式:000101010  utf-8、gbk等

(3)例子:

# 英文
s = 'alex'
s1 = b'alex'
print(s,type(s))   # alex <class 'str'>
print(s1,type(s1)) # b'alex' <class 'bytes'>

# 中文
s = '中国'
print(s,type(s))

s1 = b'中国'  # 正确的表现形式是:s1 =b'\xe4\xb8\xad\xe5\x9b\xbd'
print(s1,type(s1))
#  File "E:/wj/test_project1/cs_python.py", line 69
#    s1 = b'中国'
#        ^
#SyntaxError: bytes can only contain ASCII literal characters.

(4)字符串编码转换

encode编码,如何将str--->bytes

字符串英文:unicode转换bytes类型

s1 = 'alex'
s11 =s1.encode('utf-8')
s12 = s1.encode('gbk')
print(s11,type(s11))  # b'alex' <class 'bytes'>
print(s12,type(s12))  # b'alex' <class 'bytes'>

字符串中文:unicode转换bytes类型

s1 = '中国'
s11 =s1.encode('utf-8')
s12 = s1.encode('gbk')
print(s11,type(s11))  # b'alex' <class 'bytes'>
print(s12,type(s12))  # b'alex' <class 'bytes'>

===============================基础数据类型汇总================================

1、

(1)str字符串补充:检测字符串是否只由空格组成。:str.isspace()

s = ' '
print(s.isspace())  # True
s1 = ''
print(s1.isspace())  # False

(2)list列表(条件删除)

例子:lis = [11,22,33,44,55]删除列表中奇数

j = 0
for i in lis:
    if i%2 == 1:
        del lis[lis.index(i)-j]
        i += 1
print(lis)



lis = lis[1::2]
print(lis)


li1 = []
for i in lis:
    if i%2 == 0:
        li1.append(i)
lis = li1
print(lis)

(3)使用方法

dict.fromkeys(seq[, value])   # seq -- 字典键值列表。value -- 可选参数, 设置键序列(seq)的值。

字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。

dic = dict.fromkeys([1,2,3,4],'cs')
print(dic)  # {1: 'cs', 2: 'cs', 3: 'cs', 4: 'cs'}

(4)通过字典dic查找到键的值为列表,通过用列表中append()方法添加键值

dic = {1: [], 2: [], 3: [], 4: []}
print(dic)
dic[1].append('测试')
print(dic)

(5)去除键中含k的键值

dic = {'k1':'v1','k2':'v2','a3':'v3'}

# 第一种方法
dic = {'k1':'v1','k2':'v2','a3':'v3'}
dic1 = {}
for i in dic.keys():
    if 'k' not in i:
         dic1[i] = dic[i]
dic = dic1
print(dic)



# 第二种方法
dic = {'k1':'v1','k2':'v2','a3':'v3'}
li = []
for i in dic.keys():
    if 'k' in i:
         li.append(i)
for i in li:
    del dic[i]
print(dic)

(6)转换成bool值为False的类型

# 转换成bool值为False的类型
print(bool([]))
print(bool(''))
print(bool(()))
print(bool({}))
print(bool(set()))

(7)元组:如果元组里面只有一个元素且不加逗号,那此元素是什么类型,就是什么类型

例子:

print(type((1)))  # <class 'int'>
print(type((1,)))  # <class 'tuple'>
print(type(('')))  # <class 'str'>
print(type(({})))  # <class 'dict'>

猜你喜欢

转载自blog.csdn.net/weixin_41253809/article/details/83062021