Linxing

导航

python学习第四篇 字典 集合

字典

一.定义:

  1. 字典是一种可变的容器,可以存储任意类型的数据
  2. 字典中的每个数据都是用‘键(key)’进行索引的,而不像序列(str,list,tuple)可以用整数进行索引
  3. 字典的存储是无序的
  4. 字典中的数据以键(key)-值(value)对形式进行存储
  5. 字典的键不能重复,且只能用不可变类型做为字典的键

二.创建字典的字面值方式

       字典的表示方式以{}括起来,以冒号(:)分隔键值对,各个键值对之间使用逗号分隔开

  1. 创建空的字典

d = {}

  1. 创建字典的构造函数dict

dict()       #生成一个空的字典等同于{}

dict(iterable)          #通过可迭代对象创建一个字典

dict(**kwargs)        #关键字传参的形式生成一个字典

注:字典的键必须为不可变类型的值

可变的类型:list(列表),dict(字典),set(集合)

 三.字典的基本操作

              1.字典的键索引

                     语法:

                            字典[键]

                     作用:

                            用来获取字典键所对应的值

2.字典添加和修改字典的元素

语法:

        字典[键]=值

说明:

        键不存在时,创建键,并让键绑定对应的值

        键存在时,修改键绑定的值

3.删除字典的元素

del 语句

语法:

        del    字典[键]

4.字典的键判断in,not in 运算符

可以用in 运算符判断一个键是否存在于字典中,如果存在返回True, 如果不存在返回False   not in与之相反

练习:

       写程序实现以下需求:

  1. 键如下数据形成一个字典seasons

键                   值

1 ========>‘春季有1,2,3月’

2 ========>‘夏季有4,5,6月’

3 ========>‘秋季有7,8,9月’

4 ========>‘冬季有10,11,12月’

  1. 让用户输入一个整数代表这个季节,打印这个季节对应的信息,如果用户输入的信息不存在于字典内,则提示用户信息不存在
 1 d={1:'春季有1,2,3月',
 2    2:'夏季有4,5,6月',
 3    3:'秋季有7,8,9月',
 4    4:'冬季有10,11,12月'}
 5 print(d)
 6 n=int(input("请输入一个整数"))
 7 if n in d:
 8     print(d[n])
 9 else:
10     print("用户信息不存在")

四.字典的迭代访问

l=input('请输入一段字符串')
d={}
for n in l:
    if n not in d:
        d[n]=1
    else:
        d[n]+=1
for k in d:
    print(k,':',d[k],'次')

 

练习:

       输入一段字符串,打印出这个字符串中出过的字符以及出现过的次数

       如:

              输入:abcdabcdaba

              打印如下:

                     a:4次

                     b:3次

                     c:2次

                     d:2次

              注:不强调打印顺序

1 l=input('请输入一段字符串')
2 d={}
3 for n in l:
4     if n not in d:
5         d[n]=1
6     else:
7         d[n]+=1
8 for k in d:
9     print(k,':',d[k],'')

五.可以用于字典的函数

              Len(x)    max(x)    min(x)    any(x)

六.字典的内置方法

 1.dict.clear()

                     删除字典中所有的元素

                     这个方法没有参数没有返回值

 2.dict.fromkeys(seq[,value])

创建一个新的字典,以序列seq中的元素作为字典的键,value为字典所有键对应的初始值

参数:

       seq – 字典键值列表

       value – 可选参数,社会键序列(seq)的值

返回值:

       该方法返回一个新的字典

 3.dict.get(key,default = None)

返回指定键的值,如果值不在字典中返回默认值None

       参数:

              Key-字典中要查找的键

                     Default-如果指定键的值不存在时,返回该默认值返回值

       返回值:

                     返回指定键的值,如果值本在字典中返回默认值None

 4.dict.items()

以列表返回可迭代的(键,值)元组

没有参数

        返回值:

            返回可遍历的(键,值)元组数据

    5.dict. keys  () 

        以列表返回一个字典所有的键

        没有参数返回值:

            返回一个字典的键

    6、dict. update (dict2)

        把字典dict2的键/值对更新到dict里

        参数:

            dict2  添加到指定字典dict里的字典

        返回值:

            该方法没有任何返回值

    7.dict. values ()

        以列表返回字典中的所有的值

        没有参数

        返回值:

            返回字典中所有的值。

    8.pop (key. [, default])

删除字典给定键key所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值

        参数:

            key:要删除的键值

            default:如果没有key,返回default值。

        返回值:

            返回值被删除的值。

 

    9、popitem()

        随机返回并删除宇典中的对键和值

            没有参数

        返回值:

            返回一个键值对(key, value)形式

七.字典与列表比较

  1. 都是可变的容器
  2. 索引方式不同,列表用整数索引,字典用键索引
  3. 列表的存储是有序的,字典的存储是无序的
  4. 字典的插入,删除,修改的速度快于列表(重点)

练习:

       任意输入很多学生的姓名,年龄,成绩,每个学生的信息存入到字典中,然后再放在列表内每个学生的信息需要手动输入:

       如:

              请输入姓名:tarena

              请输入年龄:15

              请输入成绩:99

请输入姓名:china

              请输入年龄:70

              请输入成绩:98

              请输入姓名:<回车>#结束输入

       内部存储格式如下:

       Infors = [{“name”:”tarena”,”age”:15,”score”:99},{name”:”china”,”age”:70,”score”:98}]

  1. 打印以上的列表
  2. 按如下表格打印学生信息

姓名

年龄

成绩

Tarena

15

99

China

70

98

 

 1 infors=[]
 2 while True:
 3     d = {}
 4     na=input("请输入姓名:")
 5     if not na:
 6         break
 7     d["name"]=na
 8     ag=input("请输入年龄:")
 9     d["age"]=ag
10     sc=input("请输入成绩:")
11     # d = dict.fromkeys(na,sc)
12     d["score"]=sc
13     infors.append(d)
14 j=1
15 k=0
16 while j<=len(infors)+3:
17     if j==1:
18         print("+-------+-------+-------+")
19     elif j==2:
20         print("|  姓名 |  年龄 |  成绩 |")
21     elif j<len(infors)+3 :
22         dl=infors[k]
23         print("|",dl['name'].center(5),"|",str(dl['age']).center(5),"|",str(dl['score']).center(5),"|")
24         k+=1
25     elif j==len(infors)+3:
26         print("+-------+-------+-------+")
27     j+=1
28 # print(infors)
29 # print("+---------------+----------+----------+")
30 # print("|     姓名      |   年龄   |   成绩   |")
31 # print("+---------------+----------+----------+")
32 # for d in infors:
33 #     n = d['name'].center(15)
34 #     a = str(d['age']).center(10)
35 #     s = str(d['score']).center(10)
36 #     print("|%s|%s|%s|" % (n, a, s))
37 # print("+---------------+----------+----------+")

打印名片管理系统:

要求:

  1. 添加一个新的名片
  2. 删除一个名片
  3. 修改一个名片
  4. 查询一个名片
  5. 显示所有名片
  6. 退出系统

提示:card_infors = [{‘name’:’xx’,’qq’:xxx,’weixin’:xxx,’addr’:’xxx’},

                               {‘name’:’xx’,’qq’:xxx,’weixin’:xxx,’addr’:’xxx’}

]

  1 print("\t\t打印名片系统")
  2 l=[]
  3 hd="+---------------+----------+----------+----------+"
  4 zh="|     姓名      |    QQ    |   微信   |   地址   |"
  5 a=0
  6 tt="jkl"
  7 while a<=6:
  8     k = 0
  9     d = {}
 10     a = int(input("1.添加 2.删除 3.修改 4.查询 5.显示所有 6.保存信息 7.退出"))
 11     if a == 1:
 12         na=input("名字:")
 13         qq=input("QQ:")
 14         wx=input("weixin")
 15         ad=input("addr:")
 16         d['name']=na
 17         d['qq']=qq
 18         d['weixin']=wx
 19         d['addr']=ad
 20         l.append(d)
 21     elif a==2:
 22         while k==0:
 23             i = 0
 24             an = input("请输入要删除的名字(可输入jkl返回)")
 25             if an==tt:
 26                 k=1
 27             else:
 28                 for dl in l:
 29                     if an == dl['name']:
 30                         l.pop(i)
 31                         print("删除成功")
 32                         k = 1
 33                     else:
 34                         i += 1
 35                 if k == 0:
 36                     print("输入错误名字")
 37     elif a==3:
 38         while k==0:
 39             i = 0
 40             d = {}
 41             an = input("请输入要修改的名字(可输入jkl返回)")
 42             if an==tt:
 43                 k=1
 44             else:
 45                 for dl in l:
 46                     if an == dl['name']:
 47                         na = input("修改后名字:")
 48                         qq = input("修改后QQ:")
 49                         wx = input("修改后weixin")
 50                         ad = input("修改后addr:")
 51                         d['name'] = na
 52                         d['qq'] = qq
 53                         d['weixin'] = wx
 54                         d['addr'] = ad
 55                         l[i] = d
 56                         print(hd)
 57                         print(zh)
 58                         print(hd)
 59                         an = l[i]['name'].center(15)
 60                         pp = l[i]['qq'].center(10)
 61                         xw = l[i]['weixin'].center(10)
 62                         da = l[i]['addr'].center(10)
 63                         print("|%s|%s|%s|%s|" % (an, pp, xw, da))
 64                         print(hd)
 65                         k = 1
 66                     else:
 67                         i += 1
 68                 if k == 0:
 69                     print("输入错误名字")
 70     elif a==4:
 71         while k==0:
 72             i = 0
 73             a = int(input("请输入要查询的序号(可输入-1退出)"))
 74             if a==-1:
 75                 k=1
 76             else:
 77                 if a <= len(l) + 1:
 78                     print(hd)
 79                     print(zh)
 80                     print(hd)
 81                     dl = l[a - 1]
 82                     an = dl['name'].center(15)
 83                     pp = dl['qq'].center(10)
 84                     xw = dl['weixin'].center(10)
 85                     da = dl['addr'].center(10)
 86                     print("|%s|%s|%s|%s|" % (an, pp, xw, da))
 87                     print(hd)
 88                     k = 1
 89                 else:
 90                     print("请输入小于%d的正整数序号", len(l) + 1)
 91     elif a==5:
 92         print(hd)
 93         print(zh)
 94         print(hd)
 95         for dl in l:
 96             an = dl['name'].center(15)
 97             pp = dl['qq'].center(10)
 98             xw = dl['weixin'].center(10)
 99             da = dl['addr'].center(10)
100             print("|%s|%s|%s|%s|" % (an, pp, xw, da))
101         print(hd)
102         # print(l)
103     elif a==6:
104         f = open('./mingpian.txt', 'w', encoding='utf-8')
105         for dl in l:
106             an = dl['name'].center(15)
107             pp = dl['qq'].center(10)
108             xw = dl['weixin'].center(10)
109             da = dl['addr'].center(10)
110             x=an+pp+xw+da
111             print(x)
112             f.write(x)
113         f.close()
114     elif a==7:
115         break
116     else:
117         print("输入错误,退出")
118         break

 

集合

       集合是可变的序列容器

       集合内的数据对象都是唯一的(不能重复多次的)

       集合是无序的存储结构,集合中的数据没有先后顺序关系

       集合内的元素必须是不可变对象

       集合是可迭代对象

       集合是相当于只有键没有值的字典

  1. 创建集合的构造函数

Set() 创建一个空集合对象(不能用{}来创建空集合)

Set(iterable)   用可迭代对象来创建新的集合对象

注:

        非空集合用{}括起来,内部的各个元素用(,)分隔开

创建非空集合

集合的添加与删除操作

       添加:

  1. add方法:把要传入的元素做为一个整个添加到集合中
  2. updata方法:是把要传入的元素拆分,作为个体传入到集合中删除

 

remove 删除集合中要删除的元素

集合中的查看

       集合也是可迭代对象可以用for循环遍历查看其中的元素

 

集合的运算:

       交集&            生成两个集合的交集   

       并集|             生成两个集合的并集

       补集-             生成两个集合的补集   

       对称补集^      生成两个集合的对称补集

       子集<            判断一个集合是另一个集合的子集

       超集>            判断一个集合是另一个集合的超集

 

posted on 2019-06-26 21:24  Linxing  阅读(404)  评论(0编辑  收藏  举报