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]}

 

posted @ 2017-10-25 15:28  dream-子皿  阅读(165)  评论(0编辑  收藏  举报