zoukankan      html  css  js  c++  java
  • day6 note 字典的增删改查(以及setdefault用法补充)

    今天的内容主要是join的用法和字典的用法,由于已经有前面的列表作为基础,所以还比较简单,不过因为昨天的作业比较难也比较多,所以作业的讲解占用的时间比较长。我需要好好消化一下作业的部分。

    思维导图:

    前一天内容回顾:

    1:list:li = [1,2,3,5,'a'] 增加:append:末尾加入==追加       insert:插入,在任意位置,insert(index,'内容')       extend:迭代着加入,'asc' ----> a,s,c [1,2,3] ---->1,2,3 删除:pop 按索引删除,有返回值       remove:按元素删除       del:del li[0]  del li[1:4]  del li       clear:清空 改:li[0] = 'fdfgdg' li[1:3] = 'abcd' li = [1,a,b,c,d,5,'a'] 查询:按索引,切片,for while等都可以查出。 方法:count  没有切片       sort从小到大,正序,sort(reverse = True)倒叙排序       reverse:反转       index:找出元素的索引位置 可以切片 li = [1,2,[3,4,'taibai','a'],3,5,'a']     li[2][2]=li[2][2].captize

    2,元祖。只读,不能更改,儿子不能改,孙子可以改。       可以切片。 3,range(4,12) = [4,5,。。。。11]

    py2:xrange     range py3:range

    前一天作业内容讲解:

      1 li = [1,3,2,'a',4,'b',5,'c']
      2 # print(li[-1])
      3 # print(li[7:])
      4 #3
      5 lis = [2,1,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv']
      6 '''
      7 1)将列表lis中的’tt’变成大写(用两种方式)。
      8 2)将列表中的数字3变成字符串’100’(用两种方式)。
      9 3)将列表中的字符串’1’变成数字101(用两种方式)。
     10 '''
     11 # lis[3][2][1][0] = 'TT'
     12 # new_str = lis[3][2][1][0].upper()
     13 # lis[3][2][1][0] = new_str
     14 # lis[3][2][1][1] = '100'
     15 # lis[3][2][1][1] = str(lis[3][2][1][1] + 97)
     16 # lis[3][2][1][2] = 101
     17 # print(lis)
     18 # lis[3][2][1][2] = int(lis[3][2][1][2]) + 100
     19 # lis[3][2][1][2] = int(str(10) + lis[3][2][1][2])
     20 lis = str([2,3,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv'])
     21 # print(lis,type(lis))
     22 # lis = lis.replace('3','100')
     23 # print(lis)
     24 # li = lis.split(',')
     25 # print(li,type(li))
     26 '''
     27 4,请用代码实现: 
     28        li = [‘alex’,’eric’,’rain]
     29 利用下划线将列表的每一个元素拼接成字符串"alex_eric_rain"
     30 '''
     31 #format
     32 
     33 li = ['alex','eric','rain']
     34 # info = '{}_{}_{}'.format(li[0],li[1],li[2])
     35 # print(info)
     36 
     37 # li = ['alex','eric','rain']
     38 # msg = ""
     39 # is_first = True
     40 # for item in li:
     41 #     if is_first:
     42 #         tmp = item
     43 #         print(tmp)
     44 #         is_first =False
     45 #     else:
     46 #         tmp = "_" + item
     47 #         print(tmp) #'_eric'
     48 #     msg += tmp  # 'alex_eric'
     49 #     print(msg)
     50 # print(msg)
     51 # li = ['alex','eric','rain']
     52 # sb='alex'
     53 # for i in li[1:]:
     54 #     sb=sb+"_"+i
     55 # print(sb)
     56 #join
     57 # li = ['alex','eric','rain']
     58 # str(li)
     59 # temp = ''.join(li)
     60 # print(temp)
     61 #将str ---> list    split
     62 #将list  ---> str   join
     63 # s = 'alex'
     64 # temp = '*'.join(s)  # 可迭代对象
     65 # print(temp)
     66 # li = [1,2]
     67 # li = str(li)
     68 # print(li[1],type(li[1]))
     69 '''
     70 5,查找列表li中的元素,移除每个元素的空格,
     71 并找出以’A’或者’a’开头,并以’c’结尾的所有元素,并添加到一个新列表中,最后循环打印这个新列表。
     72 li = [‘taibai ’,’alexC’,’AbC ’,’egon’,’ Ritian’,’ Wusir’,’  aqc’]
     73 '''
     74 # li = ['     taibai ','alexC','AbC ','egon',' Ritian',' Wusir','  aqc']
     75 # l1 = []
     76 # for i in li:
     77 #    j = i.strip()
     78 #    # if j[0].upper() == 'A' and j[-1] == 'c':
     79 #    if j.startswith('A') and j[-1] == 'c':
     80 #        l1.append(j)
     81 #
     82 # for k in l1:
     83 #     print(k)
     84 # li = ["苍老师","东京热",'武藤兰','波多野结衣']
     85 # new_li = []
     86 # info = input('请输入你的评论')  # 苍老师,fdsa东京热
     87 # for i in li:
     88 #     if info.find(i) != -1:
     89 #         l = len(i)
     90 #         info = info.replace(i,'*'*l)   #***,fdsa东京热
     91 # new_li.append(info)
     92 # print(new_li)
     93 
     94 """
     95 7,有如下列表li = [1,3,4’,alex’,[3,7,8,’taibai’],5,’ritian’]
     96 循环打印列表中的每个元素,遇到列表则再循环打印出它里面的元素。
     97 我想要的结果是(用三种方法实现)
     98 """
     99 li = [1,3,4,'alex',[3,7,8,'taibai'],5,2]
    100 # print('********',li.index([3,7,8,'taibai']))
    101 # new_li = []
    102 # for i in li:
    103 #     if type(i) == list:  # i == [3,7,8,'taibai']
    104 #         index_list = li.index(i)  # index_list == li.index([3,7,8,'taibai']) == 4
    105 # new_li = li[:index_list]  # new_li = [1,3,4,'alex',]
    106 # new_li.extend(li[index_list])  # [1,3,4,'alex',].extend([3,7,8,'taibai'])
    107 # #  new_li = [1,3,4,'alex',3,7,8,'taibai']
    108 # new_li = new_li.extend(li[index_list+1:])  # li[index_list+1:] ==[5,2]
    109 #new_li = [1,3,4,'alex',3,7,8,'taibai',5,2]
    110 # for j in new_li:
    111 #     print(j)
    112 # li = [1,2,3]
    113 # l2 = ['a','b','c']
    114 # l3 = li+l2
    115 # print(l3)
    116 l = [1,2,3,'4']
    117 l[1] = ['2',3,'alex']
    118 print(l) #[1,['2',3,'alex'],3,'4']   [1,'2',3,'alex',3,'4']
    119 l[1:2] = ['2',3,'alex']
    120 print(l)
    121 
    122 li = [1,3,4,'alex',[3,7,8,'taibai'],5,2]
    123 for i in li:            ####方法一
    124     if type(i) == list:
    125         index_list = li.index(i)  # 4  i = [3,7,8,'taibai']
    126         li[index_list:index_list+1] = i   #  li[4:5] = [3,7,8,'taibai']
    127         #  li = [1,3,4,'alex',3,7,8,'taibai',5,2]
    128         # print(i)
    129 # for j in li:
    130 #     print(j)
    View Code

    当天内容讲解:join的使用方法.join可以把列表转换成字符串,得到的字符串可以进行字符串的一切变化和运算。

    字典的用法:

    增加的方法有两种,第一种就是在直接在原字典下面叠加字典的格式如下图:叠加后直接打印。当键与原字典相同时自动覆盖,否则直接加在原字典末尾位置。

    另一种是用setdefault,例:dic.setdefault('被增加的内容')  如果被增加的内容里有原字典的元素,则覆盖原元素,否则直接增加。

    删除用pop,按照键去删除,然后返回删除的内容。如果删除的内容是原字典不存的,会报错,除非设置报错的返回值,如下图: 

     
     
    1 dic = {}
    2 dic['weight'] = 75
    3 dic['name'] = '日天'
    4 print(dic)
    5 
    6 
    7 
    8 {'weight': 75, 'name': '日天'}
    View Code
    用键直接等于值,然后print(dic)就能实现字典的添加。
     
     

    删除用pop,按照键去删除,然后返回删除的内容。如果删除的内容是原字典不存的,会报错,除非设置报错的返回值,如下图:    

    还有删除的方法,clear,清空字典;del dic[‘被删的键’],如果被删的键没有,会报错。

    另外有一个方法是随机删除---popitem,几乎不用。

    改的方法:直接在原列表下叠加dic[‘键’]=的值如图:直接打印dic得到结果。

    dic = {'name':'alex','age':56,'hobby ':'oldwomem'}
    dic['name']='jinxing'
    print(dic)
    
    
    
    
    
    
    
    {'name': 'jinxing', 'age': 56, 'hobby ': 'oldwomem'}
    

    用update改:原有的内容不会改变,否则直接添加。

     

    查的方法:

    最直接的方法直接print(dic[‘键’])如果键没有,会报错;还有用get查 :如下图

    get直接加get(“键”),若键不存在返回‘none’,不报错。

    用for循环查询:

     1 #1,字典无序。2,数据关联性强,3键值对。唯一一个映射的数据类型。
     2 # dic = {'name':'jinxin','age':20}
     3 # dic = {'py8期':['晓梅','方胜君',],'py6期':['zhangsan','lisi','wangwu']}
     4 # li = ['alex','taibai','ritian']
     5 # print(dic['name'])
     6 #字典的键必须是可哈希的(不可变的数据类型:字符串,数字,布尔值,元祖)并且是唯一的
     7 #不可哈希的(可变的数据类型:列表,字典,set)
     8 dic = {'name':'alex','age':56,'hobby ':'oldwomem'}
     9 # print(dic)
    10 #增:1
    11 dic['weight'] = 75
    12 # dic['name'] = '日天'
    13 # print(dic)  # null
    14 #setdefault 有键值对不做任何改变,没有键值对才添加
    15 # dic.setdefault('k')
    16 # dic.setdefault('name','v')
    17 # print(dic)
    18 #删 pop
    19 # print(dic.pop('name'))
    20 # print(dic.pop('fdsafdsa',None))
    21 # dic.popitem()
    22 # print(dic)
    23 # dic.clear()  # 清空
    24 # print(dic)
    25 # del dic['name']
    26 # print(dic)
    27 dic = {'name':'alex','age':56,'hobby ':'oldwomem'}
    28 dic1 = {'name':'barry','job':'teacher'}
    29 #
    30 # dic['name'] = 'jinxin'
    31 # print(dic)
    32 #update
    33 # dic.update(dic1)
    34 # print(dic)
    35 # print(dic1)  # {'name': 'barry', 'job': 'teacher'}
    36 
    37 #
    38 # print(dic['name'])
    39 # print(dic['gfgfgfdgf'])  # 报错
    40 # print(dic.get('name'))
    41 # print(dic.get('gfdgfgf'))  # None
    42 # print(dic.get('gfdgfgf','sb,没有这个键'))
    43 # print(dic.keys(),type(dic.keys()))
    44 # for key in dic.keys():
    45 #     print(key)
    46 # for i in dic:
    47 #     print(i)
    48 # print(dic.values())
    49 # for value in dic.values():
    50 #     print(value)
    51 # print(dic.items())
    52 # a,b = [1,2]
    53 # key,value = (3,4)
    54 # print(a,b)
    55 # for key,value in dic.items():
    56 #     print(key,value)
    57 dic1 = {
    58     'name':['alex',2,3,5],
    59     'job':'teacher'
    60     }
    61 dic1['name'][0] = dic1['name'][0].capitalize()
    62 print(dic1)
    View Code

    字典里面,有一个setdefault用法,

    我们先来解释一下,它是干什么的,setdefault,是一个默认字典,

    1:key存在,则不赋值,key不存在则设置默认值,

    2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值,

    # d={}
    # print(d.setdefault("b",2))  # 2 这里我们的d里面没有值,它就返回设置的默认值,这个时候你给它赋什么值,它就返回什么值给你
    
    # c={"a":111}
    # print(c.setdefault("a",2))  # 111 这里我们的c里面有key,返回的就是它自己已有的值,即便你设置了新的值,也不会生效

    setdefault源码:

    在builtins.py里面,有一个字典类

    class dict(object):

        def setdefault(self, k, d=None): # real signature unknown;     restored from __doc__
            """ D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
            pass
    v=dict.fromkeys(['k1','k2'],[])
    '''
      def fromkeys(*args, **kwargs): # real signature unknown
            """ Returns a new dict with keys from iterable and values equal to value. """
            pass
    
    
      返回一个新的字典,其中包含来自iterable和值等于value的键
    '''
    我们的fromkeys是把它里面需要的参数迭代组合成一个字典,前面的参数是key,后面的参数是value,就相当于用zip方法把他们给拼接上,
    然后就组成了有两个键值对的字典,在下面得到的结果,
    v['k1'].append(123) # print(v) # {'k1': [123], 'k2': [123]} v['k1']=321 这里是重新对k1这个键进行了赋值,做了更新操作 print(v) # {'k1': 321, 'k2': [123]}
  • 相关阅读:
    Linux05——用户操作
    租房子-----多选题
    查询
    增删
    PHP基础
    数据库--高级查询
    CRUD查询
    CRUD操作
    数据库
    轮播
  • 原文地址:https://www.cnblogs.com/2012-dream/p/7729087.html
Copyright © 2011-2022 走看看