python初识三

字典

  ps:数据类型分类:1、不可变数据类型:元组、bool、int、str、(也被称为可哈希)

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

  字典的Key必须为不可变数据类型,但字典的值value可以为任意数据类型

  dict 的优点:可以使用二分查找查询、可以存储大量的关系型数据

  特点:在python3.5之前的版本,字典是无序的

字典的增

dic = {'name':'haohao'}
dic['age'] = 22  # 若无键值对,则增加键值对
print(dic)
dic['name'] = 'huahua'  # 若有键值对,则值覆盖
print(dic)
dic = {'name': 'HaoHao'}
dic.setdefault('age', 22)  # 若无键值对,则增加键值对
print(dic)
dic.setdefault('name', 'HuaHua')  # 若有键值对,则不执行操作
print(dic)

字典的删

dic = {'name': 'HaoHao', 'age': 22, 'hobby': 'IT'}
s = dic.pop('name', None)  # 若键值存在,则删除键,返回值;若不存在返回None(可自定义)
print(s)
dic = {'name': 'HaoHao', 'age': 22, 'hobby': 'IT'}
k,v = dic.popitem()  # 随机删除键值对,返回删掉的键值对
print(k,v)
dic = {'name': 'HaoHao', 'age': 22, 'hobby': 'IT'}
dic.clear()  # 清空字典
print(dic)
dic = {'name': 'HaoHao', 'age': 22, 'hobby': 'IT'}
del dic['name']  # 删除键'name',没有则会报错
print(dic)
del dic  # 删除字典
print(dic)

字典的改

dic = {'name': 'HaoHao', 'age': 22, 'hobby': 'IT'}
dic['name'] = 'HuaHua'  # 直接对键值进行修改
print(dic)
dic = {'name': 'HaoHao', 'age': 22, 'hobby': 'IT'}
dic2 = {'name': 'HuaHua'}
dic2.update(dic)  # dic的键值对对dic2进行覆盖添加
print(dic2)

字典的查

dic = {'name': 'HaoHao', 'age': 22, 'hobby': 'IT'}
l1 = dic.keys()  # 字典的Key放入列表
l2 = dic.values()  # 字典的值放入列表
l3 = dic.items()  # 将字典的键值对构成一个小元组,放入列表
print(l1, '\n', l2, '\n', l3)
for k, v in l3:  # 通过循环查询输出键值对
    print(k,v)
s = dic.get('name1', None)  # 通过get获取键值信息,查到后返回对应值,若没有查到返回None(可自定义)
print(s)

字典的嵌套

dic = {'sushe':{1:{'name': 'HaoHao', 'age': 22, 'hobby': 'IT'},
                2:{'name': 'HuaHua', 'age': 20, 'hobby': 'IT'},
                3:{'name': 'AnShao', 'age': 22, 'hobby': 'IT'}},
       'school': 'ShiFan'}
dic['sushe'][4] = {'name': 'QianGe', 'age': 23, 'hobby': 'IT'}  # 添加新的建值对
dic['sushe'][2]['name'] = dic['sushe'][2]['name'].upper()  # 将字典中的某个字符串大写
print(dic)

小知识点总结

  1、python2与python3的区别

    python2中   print 'abc' 可以加()也可以不加

          range()  xrange()

          raw_input()

    python3中   print ('abc')必须加()

          range()

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

          input()

  2、=   ==    is     id

   = 赋值

   == 比较值是否相等

   is 比较内存地址

   id  内容地址

l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(l1 is l2)
l3 = l1
print(l1 is l3)
print(id(l1), id(l2), id(l3))

  3、int     str

  注意:数字和字符串类型有小数据池(可以节省内存空间)

    数字的范围 -5~256

    字符串:1、不能有特殊字符;2、s*20还是同一个地址,但s*21以后就是不同地址了(python3.7第二点好像不适用)

i1 = 6
i2 = 6
print(i1 is i2, id(i1), id(i2))
s1 = 'abc'
s2 = 'abc'
print(s1 is s2, id(s1), id(s2))

  4、(1)多个编码规则之间的二进制是不能相互识别的,互相之间会产生乱码

     (2)文件的存储、传输的时候不能是unicode编码方式(可以是utf-8、utf-16、gbk、gb2312等)

     (3)python3的str 在内存中是用unicode编码的,在存储和传输时要转换成bytes类型(utf-8、gbk、gb2312)

  ps:编码类型的转换方式

    对于英文: str :表现形式:s = 'alexi'    编码方式为:01010101······(unicode),

         bytes: 表现形式:s = b'alexi'  编码方式为:010101010·······(utf-8、gbk、gb2312)

    对于中文: str :  表现形式: s = '中国'   编码方式为: 0101011110······(unicode)

         bytes: 表现形式:s = b'\xe4\xb8\xad\xe5\x9b\xbd'  编码方式为:01010100·····(utf-8、gbk、gb2312)

  如何将str 转换为 bytes编码方式?encode()

s1 = '中国'
s2 = s1.encode('utf-8')
print(s2)

基础数据类型补充

  list: 在循环列表时要注意不要删除列表中的内容,因为列表时可变数据类型,在删除列表中内容后会影响循环

  dict:补充一种字典的建立方式

dic = dict.fromkeys([1, 2, 3], [])  # 迭代添加Key,添加同样的值
print(dic)
dic[1].extend('泰格')
dic[2].append('二哥')
print(dic)
# 要注意的是,这样建的字典和直接定义的字典的不同之处,这种字典中修改一个键值,所有的都会改变,要注意与下面方式的区别
dic = {1: [], 2: [], 3: []}
print(dic)
dic[1].extend('泰格')
dic[2].append('二哥')
print(dic)

    同样,字典也属于可变数据类型,因此与列表一样,在循环字典时不能删除字典的键值对,当想删除字典的键值对时,应

  先将想要删除的键写入一个列表中,然后在通过循环列表删除字典中的键值对。

dic = {1: [], 2: [], 3: [], 4: []}
li = []
for i in dic:
    if i%2 == 0:  # 删除字典中的偶数键值对
        li.append(i)
for i in li:
    del dic[i]
print(dic)

  ps:小知识 0 ''  []  {}  set() 转化为 bool 时为False

猜你喜欢

转载自www.cnblogs.com/xfdhh/p/9782622.html
今日推荐