欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Task05:Python中的字典(详细内容)、集合(概括性)

程序员文章站 2022-07-11 14:58:41
...

一.字典

1.使用字典

字典是一种比较特别的数据类型,字典中每个成员以“键:值”对的形式成对存在。字典是以大括号“{ }”包围并且以“键:值”对的方式声明和存在的数据集合。字典与列表相比,最大的不同在于字典是无序的,其成员位置只是象征性的,在字典中通过键来访问成员,而不能通过其位置来访问该成员。

1.1创建并访问字典

在Python中,字典可以存储任意类型对象。字典的每一个键值“key:value”对之间必须用冒号“:”分隔,每对之间用逗号“,”分隔,整个字典包括在大括号“{ }”中。

  • 字典是由一系列“键:值”对构成的,每个键都与一个值相关联,可以使用键来访问与之相关联的值。

  • 在字典中可以存储任意个“键:值”对。

  • 每一个“key:value”键值对中的键(key)必须是唯一的、不可变的,但值(value)则不必。

  • 键值可以取任何数据类型,可以是数字、字符串、列表乃至字典。

    接下来举一个例子,就是水果摊的老板想要用字典来保存他的水果和价格。可以用下面这段代码来表示

    dict = {"苹果":"13","香蕉":"15","水蜜桃":"23"}
    

    当然也可以把它们分解出来,就像下面的代码一样。

    dict1 = {"苹果":"13"}
    dict2 = {"香蕉":"15"}
    dict3 = {"水蜜桃":"23"}
    

    要想获取某一个键的值,可以通过访问键的方式来显示对应的值。

    dict = {"苹果":"13","香蕉":"15","水蜜桃":"23"}
    print("苹果的价格:",dict["苹果"])
    print("香蕉的价格:",dict["香蕉"])
    print("水蜜桃的价格:",dict["水蜜桃"])
    
    苹果的价格: 13
    香蕉的价格: 15
    水蜜桃的价格: 23
    

如果调用的字典没有这个“键”的话,运行的结果则会发生报错。里面水果摊的老板并没有打算把西瓜放到他的字典里面,如果我们调用的西瓜,则会报错。

dict = {"苹果":"13","香蕉":"15","水蜜桃":"23"}
print("苹果的价格:",dict["苹果"])
print("香蕉的价格:",dict["香蕉"])
print("水蜜桃的价格:",dict["水蜜桃"])
print("西瓜的价格:",dict["西瓜"])
苹果的价格: 13
香蕉的价格: 15
水蜜桃的价格: 23
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-5-ddb2f7b5bed1> in <module>
      3 print("香蕉的价格:",dict["香蕉"])
      4 print("水蜜桃的价格:",dict["水蜜桃"])
----> 5 print("西瓜的价格:",dict["西瓜"])

KeyError: '西瓜'

1.2向字典中添加数据

在Python中,字典是一种动态结构,可以随时在其中添加“键值”对。在添加“键值”对时,需要首先指定字典名,然后用中括号将键括起来,最后写明这个键值。比如水果摊的老板想了想,还是把西瓜加进去他的字典里面吧,顺便把今天早上刚拉了一车的草莓也加进去,老板可以这么操作。

dict = {"苹果":"13","香蕉":"15","水蜜桃":"23"}
dict["西瓜"] = 15
dict["草莓"] = 29
print(dict)
{'苹果': '13', '香蕉': '15', '水蜜桃': '23', '西瓜': 15, '草莓': 29}

1.3修改字典

在Python中,要想修改字典中的值,需要首先指定字典名,然后使用中括号把将要修改的键和新值对应起来。例如还是上面的例子,受疫情影响,水果摊老板想把他的水蜜桃升价来弥补他的租金亏损。

dict = {"苹果":"13","香蕉":"15","水蜜桃":"23","西瓜":"15","草莓":"29"}
dict["水蜜桃"] = 26
print(dict)
{'苹果': '13', '香蕉': '15', '水蜜桃': 26, '西瓜': '15', '草莓': '29'}

1.4删除字典中的元素

对于字典不再需要的信息,可以使用del语句将相应的“键值”对信息彻底删除。在使用del语句时,必须指定字典名和删除的键。例如水果摊的里面受季节的影响,草莓没货了,老板不得不把草莓删除掉。

dict = {"苹果":"13","香蕉":"15","水蜜桃":"23","西瓜":"15","草莓":"29"}
dict["水蜜桃"] = 26
print(dict)
del dict["草莓"]
print(dict)
{'苹果': '13', '香蕉': '15', '水蜜桃': 26, '西瓜': '15', '草莓': '29'}
{'苹果': '13', '香蕉': '15', '水蜜桃': 26, '西瓜': '15'}

1.5创建空字典

在Python中,有时为了满足项目程序的特定需求,需要创建一个空字典。此时可以先使用一对空的大括号定义一个字典,然后再分行添加各个“键值”对。

dict = {}
dict ["苹果"]="13"
dict ["香蕉"]="15"
dict ["水蜜桃"]="26"
dict ["西瓜"]="15"
print(dict)
{'苹果': '13', '香蕉': '15', '水蜜桃': '26', '西瓜': '15'}

2.遍历字典

一个字典可能只包括几个“键值”对,也可能包含数百万个”键值“对。因为字典可能包含大量的数据,所以Python支持对字典遍历。在字典中,可以使用各种方式存储信息,所以可以通过多种方式遍历字典。

2.1一次性遍历所有的”键值“对

咱们可以使用for…in循环语句一次性遍历所有的”键值“对。

user = {"名字":"00","渴望":"在看","希望":"更多人关注呀"}
for key,value in user.items():
    print("\nKey:",key)
    print("\nValue:",value)
Key: 名字

Value: 00

Key: 渴望

Value: 在看

Key: 希望

Value: 更多人关注呀

item()函数在之前的文章上有提起到,它的作用是以列表返回可遍历的(键,值)元组数组。

2.2遍历字典中的所有键

使用内置方法keys()能够以列表的形式返回一个字典中的所有键。keys()没有参数,只有返回值,语法格式是:dict.keys()。比如还是回到水果摊老板上,有一天,老板只是想要从他的水果字典中列一个清单名字出来,不要价格,看看自己卖了些什么水果。

dict = {"苹果":"13","香蕉":"15","水蜜桃":"23","西瓜":"15","草莓":"29"}
for name in dict.keys():
    print(name)
苹果
香蕉
水蜜桃
西瓜
草莓

2.3遍历字典中的所有的值

前面分享的键,这一个就是分享了值,所以,在Python中,我们可以使用 方法values()返回一个字典中所有的值,而不包含任何键。

使用的方法跟keys()是一样的,都是没有参数,只有返回值。

dict = {"苹果":"13","香蕉":"15","水蜜桃":"23","西瓜":"15","草莓":"29"}
for name in dict.values():
    print(name)
13
15
23
15
29

3.字典嵌套

在Python中,有时需要将一系列字典存储在列表中,或将在列表作为值存储在字典中,这称为嵌套。可以在列表中嵌套字典,也可以在字典中嵌套列表,甚至可以在字典中嵌套字典。

3.1字典列表

我们还来举一个例子吧,就不举水果摊老板的背景例子吧弄成别的,假设有一个统计班级学生成绩的场景,班级中的每一个学生都有自己的一个成绩卡,这个成绩卡可以用字典实现。例如:

stu = {"语文":"90","数学":"95","英语":"93"}

但是呢后面学校说为了让竞争氛围更为浓厚,就不要用成成绩卡了,将班级内的学生成绩公布出来。因为上面“stu”只能包含一个学生的信息而无法存储第二个学生的信息,就更别说把全班的同学把成绩公布出去了,所以老师们想到一个解决方法就是,创建一个全班学生的列表,其中每一个学生都是一个字典,这个字典包含有关该学生的各科成绩信息。

stu = {"语文":"90","数学":"95","英语":"93"}
stu1 = {"语文":"92","数学":"90","英语":"89"}
stu2 = {"语文":"97","数学":"85","英语":"98"}
stus = [stu,stu1,stu2]      # 将上面三个字典创建一个列表
for name in stus:         # 运用for语句遍历列表
    print(name)
{'语文': '90', '数学': '95', '英语': '93'}
{'语文': '92', '数学': '90', '英语': '89'}
{'语文': '97', '数学': '85', '英语': '98'}

但是在现实中咱们可能只有三个同学呢,而且每个学生都是使用代码自动生成的。假如一个班有30个学生,那么可以range()函数生成这这30个同学的成绩。

stus = []
for stu_number in range (0,30):
    new_stu = {"语文":"92","数学":"98","英语":"96"}
    stus.append(new_stu)
for stu in stus[0:5]:     # 使用一个切片来显示前5组
    print(stu)
print("...")
{'语文': '92', '数学': '98', '英语': '96'}
{'语文': '92', '数学': '98', '英语': '96'}
{'语文': '92', '数学': '98', '英语': '96'}
{'语文': '92', '数学': '98', '英语': '96'}
{'语文': '92', '数学': '98', '英语': '96'}
...

注意:虽然上面这一个例子中每一个学生都具有相同的特征,但是在Python看来这些都是独立的,我们可以独立地修改每一名学生。

3.2在字典中存储字典

比如在考试前,班主任要收集班级同学的个人信息,姓名作为键,一些个人信息是值,收集完要想访问这些信息,我们需要遍历所有的姓名,并访问与每一个姓名相关联的信息字典。

users = {"小明":{"性别":"男","电话":"137xxxxxx80"},
        "小红":{"性别":"女","电话":"135xxxxxx85"}}
for username,use_info in users.items():
    print("\n姓名:",username)
    gender = use_info["性别"]
    phone = use_info["电话"]
    print("\n性别:",gender)
    print("\n电话:",phone)
姓名: 小明

性别: 男

电话: 137xxxxxx80

姓名: 小红

性别: 女

电话: 135xxxxxx85

3.3在字典中存储列表

假如开了一家面馆,该如何描述顾客的点餐过程呢?如果是使用列表,只能储存顾客要添加的配料(例如多放辣椒、多加肉)。但是如果使用字典,不仅可以在其中包含 其他有关面条的描述,例如是什么类型的面,拉面还是凉面。例如下面的一个例子

noodles = {"型号":"拉面",
          "配料":["多加10块钱的肉","多放辣椒油"]}
print("您点了一份"+ noodles["型号"],",您的备注:")
for i in noodles["配料"]:
    print(i)
您点了一份拉面 ,您的备注:
多加10块钱的肉
多放辣椒油

在上面的代码中,第一行创建了一个字典,其中储存了有关顾客所点面条的信息。在这个字典中,一个键是“型号”,与其相关联的值是字符串“拉面”;另一个键是“配料”,与其相关联的值是一个列表,在这个列表中储存了顾客的要求,厨师在制作过程中就可以看到顾客的备注了。

二、 集合

1.使用集合

在Python中,集合(set)是一个无序不重复元素的序列。集合的基本功能是进行成员关系测试并删除重复的元素。Python语言规定使用大括号“{ }”或函数set()创建集合。在创建一个空集合时必须要用函数set()实现,而不能使用大括号“{ }”实现,这是因为空的大括号“{ }”是用来创建一个空字典的。

a = set("abcde")
b = set("abc")
print(a)
print(a-b)   # a和b的差集
print(a|b)   # a和b的并集
print(a&b)   # a和b的交集
print(a^b)   # a和b中不同时存在的元素
相关标签: python