6.2 字典、集合

字典(dictionary)名称虽然奇怪,其实该种组合类型提供了一种通过名称(键)来访问元素(值)的方法。前面已经介绍过列表和元组,他们只能通过序号来访问每个元素。但是在一些应用场景下,序号方式并不方便。做个比喻,就像点名,可以使用一号二号来进行,但是有时更需要直接根据姓名点名,更有针对性,也易于记忆。因此,字典的应用很广,非常实用。

1)字典的创建

data = {'ID': '000001',
        'name': '黎明',
        'age': 16,
        'height': 1.88
      }
print(data)

输出为:
{'ID': '000001', 'name': '黎明', 'age': 16, 'height': 1.88}

这里的字典数据表达了一个学生的信息,数据包括学号(ID)、姓名(name)、年龄(age)和身高(height)。如果使用序号,虽然也能保存这些学号、姓名等信息,但是无法看出具体的语义区别,只能序号0代表学号,序号1代表姓名等等,非常难记。

我们来仔细看下字典的结构。它由一个花括号前后组成,里面都是一些通过逗号分隔的元素,这和列表通过逗号分隔不同元素是一样的。每个元素都是一个通过冒号连接的数值对,冒号前面的称之为“键(key)”,冒号后面的称之为“值(value)”。字典中,就是通过利用键来唯一的确定哪个元素,就像列表通过序号来访问每个元素一样。

因此,同一个字典中不同元素的键不能重复,否则无法定位到唯一的元素。事实上,如果有多个元素具有重复的键,只有最后一个元素才有意义。

元素的键和值的数据类型都是任意,只要键不一样即可,值可以重复,获取值只能根据所在的键。

来看一个复杂的结构:

data = {'ID': ['000001', '000002', '000003', '000004', '000005', '000006', '000007'],
        'name': ['黎明', '赵怡春', '张富平', '白丽', '牛玉德', '姚华', '李南'],
        'age': [16, 20, 18, 18, 17, 18, 16],
        'height': [1.88, 1.78, 1.81, 1.86, 1.74, 1.75, 1.76]
      }

它其实表示了类似于下面的一组数据,大家仔细体会: 

ID

name

age

height

000001

黎明

16

1.88

000002

赵怡春

20

1.78

000003

张富平

18

1.81

000004

白丽

18

1.86

000005

牛玉德

17

1.74

000006

姚华

18

1.75

000007

李南

16

1.76

2)字典的读取

字典的读取只能以键为依据。

data = {'ID': '000001',
        'name': '黎明',
        'age': 16,
        'height': 1.88
        }
print(data['name'])
print(data.get('name'))

两个输出功能一样 输出都为:黎明。其中,两种写法都使用键来获取指定的元素的值。第一种写法类似于列表,只是使用键替换了序号。

对于使用列表的字典数据,可以结合使用键访问字典的方法和使用序号访问列表的方法:

data = {'ID': ['000001', '000002', '000003', '000004', '000005', '000006', '000007'],
        'name': ['黎明', '赵怡春', '张富平', '白丽', '牛玉德', '姚华', '李南'],
        'age': [16, 20, 18, 18, 17, 18, 16],
        'height': [1.88, 1.78, 1.81, 1.86, 1.74, 1.75, 1.76]
        }
print(data['name'][1])

输出为:赵怡春

如果需要循环读取字典元素所有的值,遍历字典不能通过序号下标,而是通过键值对的信息来进行,下面介绍几种常见方法:

方法1(遍历键):

data = {'000001': '黎明',
        '000002': '赵怡春',
        '000003': '张富平',
        '000004': '白丽',
        '000005': '牛玉德',
        '000006': '姚华', 
        '000007': '李南'}

for i in data:
    print(i)

输出为:
000001
000002
000003
000004
000005
000006
000007

可以看出,默认遍历字典就是遍历键。

方法2(遍历键)

data = {'000001': '黎明',
        '000002': '赵怡春',
        '000003': '张富平',
        '000004': '白丽',
        '000005': '牛玉德',
        '000006': '姚华', 
        '000007': '李南'}

for i in data.keys():
    print(i)

输出为:
000001
000002
000003
000004
000005
000006
000007

方法3(遍历值):

data = {'000001': '黎明',
        '000002': '赵怡春',
        '000003': '张富平',
        '000004': '白丽',
        '000005': '牛玉德',
        '000006': '姚华', 
        '000007': '李南'}

for i in data.values():
    print(i)

输出为:
黎明
赵怡春
张富平
白丽
牛玉德
姚华
李南

方法4(遍历键值对):

data = {'000001': '黎明',
        '000002': '赵怡春',
        '000003': '张富平',
        '000004': '白丽',
        '000005': '牛玉德',
        '000006': '姚华', 
        '000007': '李南'}

for i in data.items():
    print(i)

输出为:
('000001', '黎明')
('000002', '赵怡春')
('000003', '张富平')
('000004', '白丽')
('000005', '牛玉德')
('000006', '姚华')
('000007', '李南')

此时的输出每个元素以元组的方式来呈现,因此具体获取其中的学号和姓名可以再次使用序号再获取。

3)字典的更新

data = {'ID': '000001',
        'name': '黎明',
        'age': 16,
        'height': 1.88
        }
data['age'] = 17  # 更新
data.pop('height')  # 删除
print(data)

输出为:
{'ID': '000001', 'name': '黎明', 'age': 17}。如果多次对相同键进行更新,则以最后一次更新为准。

4)集合(set)

集合可以看成是只有键的字典,功能类似于列表,但是由于是键,因此不存在重复的元素值。

 创建方法为:

data = set([8, 19, 27, 87, 8])
print(data)

输出为:{8, 27, 19, 87}

这里的花括号使之依然表现为字典的特征,创建方法也是利用列表来进行。由于只存储键,因此对相同元素,集合将自动去重。

更新方法为:

data = set([8, 19, 27, 87])
data.add(10)  # 增加
data.remove(8)  # 删除
print(data)

输出为:{10, 19, 87, 27}

集合还支持集合运算:

data1 = set([8, 19, 27, 87])
data2 = set([6, 10, 19, 76])
print(data1 & data2)
print(data1 | data2)

输出为:
{19}
{6, 8, 10, 76, 19, 87, 27}

配套学习资源、慕课视频:

Python大数据分析-李树青icon-default.png?t=M1L8https://www.njcie.com/python/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leeshuqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值