第6章 字典

1 字典概述

  • 字典是一系列键-值对。
  • 每个键都与一个值相关联,程序员可使用键来访问与之相关联的值
  • 与之相关联的值可以是数字、字符串、列表或字典
  • 键-值对是两个相关联的值。
  • 指定键时,Python会返回与之相关联的值。
  • 键和值之间用冒号(:)分隔,键-值之间用逗号(,)分隔。
# 字典创建
a = {
    1: 'a',
    2: 'b',
    '3': 'c'
}
# 注意:key必须是不可改变的数据类型
d = dict()
print(d)
e = dict(a=1, b=2, c='a')
print(e)
# 字典的访问
print(e['a'])
# 字典的改变
e['d'] = 123
print(e)
e['c'] = 3
print(e)
# 结论:一个字典不能成为另外一个字典的key,因为字典是可变的数据类型。

2 访问字典中的值

为了获取与键相关联的值,可依次指定字典名和放在方括号内的键

字典中可包含任意数量的键-值对

3 添加键-值对

  • 字典是动态结构,程序员可以随时在其中添加键-值对

要添加键-值对,可依次指定字典名、方括号中的键和与之相关联的值

  • 键-值对的排列顺序和添加顺序不同。Python不关心键-值对的添加顺序,只关心键和值之间的关联关系。

4 创建空字典

使用一对空的花括号定义一个字典,再分别添加各个键-值对。

使用字典来存储用户提供的数据或在编写能自动生成大量键-值对的代码时,通常需要先定义一个空字典。

5 修改字典中的值

修改字典中的值,可依次指定字典名、方括号内的键以及与该键相关联的新值

6 删除键-值对

对于字典中不再需要的值,可使用del语句将相应的键-值对彻底删除

  • 使用del语句时,必须指定字典名和要删除的键
  • del语句删除的键-值对永远消失。

7 由类似对象组成的字典

字典可以存储一个对象的多种信息,也可以用字典来存储众多对象的同一种信息。

  • 定义好字典后,在最后一个键-值对的下一行添加一个花括号,并缩进4个空格,使其与字典最后的键对齐。
  • 在最后一个键-值对后面也加上都好,为以后在下一行添加键-值对做好准备。

8 print语句分成多行

单词print比大多数字典名都短,因此让输出的第一部分紧跟在左括号后面是合理的。

  • 在合适的地方拆分要打印的内容,并在第一行末尾加上一个拼接运算符(+)。
  • 按回车键进入print语句的后续各行,并使用Tab键将它们对齐并缩进一级。
  • 在指定要打印的所有内容后,在print语句的最后一行末尾加上右括号

9 遍历字典

  • 要编写用于字典的for循环,可声明两个变量,用于存储键-值对中的键和对。

对于这两个变量,可以使用任何名称,例如key,value。

  • for语句的第二部分包括字典名和方法items()

方法items()返回一个键-值对列表

  • for循环一次循环将每个键-值对存储到指定的两个变量中,我们使用这两个变量来打印每个键及其相关联的值。

键-值对的返回顺序也与存储顺序不同。Python不关心键-值对的存储顺序,而只跟踪键和值之间的关联关系。

9.1 方法keys()

keys()便利字典中的所有键(在不需要使用字典中的值时)。

  • 遍历字典时,会默认遍历所有的键。
  • keys()并非用于遍历。实际上,它返回一个列表,其中包括字典中的所有键。

9.2 方法value()

  • value()返回一个值列表,而不包含任何键。
  • 字典总是明确记录键和值之间的关联关系,但获取字典的元素时,获取顺序时不可预测的。
  • 要以特定的顺序返回元素,一种方法是在for循环中对返回的键进行排序。

9.3 方法set()

为剔除重复项,可使用集合set(),集合类似于列表,但每个元素都必须是独一无二的。

10 嵌套

将一系列字典存储在列表中,获奖列表作为值存储在字典中,这称为嵌套。

# 字典的基本操作
d = {
    "Name": 'Jack',
    "Age": 9,
    "Grade": 5,
}
print(d['Name'])  # 不推荐这种方法。
print(d.get('Name'))
print(d.get('name'))  # 返回None
# 获取所有的key
print(d.keys())
# 获取所有的value
print(d.values())
# 获取所有的键值对
print(d.items())
# 去除一个键值对
d.pop('Name')
# 清空
d.clear()
print(d)
# 字典的更新
c = {
    1: 1,
    2: 2,
}
c[3] = 3
c[4] = 4
print(c)
d = {
    1: 1,
    5: 5,
    6: 6,
}
c.update(d)
print(c)
e = {**c, **d}
print(e)

11 集合

集合的基本操作。

# 集合的创建
a = {'a', 'b', 'c'}
print(type(a))
t = 'c' in a
print(t)

L = [1, 2, 3, 2, 4, 5, 2]
s1 = set(L)
print(s1, type(s1), list(s1))
s = {1, 2, 3, 4}
s.add(5)
print(s)
s.add(5)
print(s)
s.remove(5)
print(s)
a = '1234512'
s1 = set(a)
print(s1)
# 小结:集合中的元素是无序的

# 数学集合
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
# 交集
print(s1 & s2)
# 全集
print(s1 | s2)
# 差集
print(s1 - s2)
print(s1 ^ s2)

动手试一试

6-1 人:

acquaintance = {
    'first_name': 'steve',
    'last_name': 'jobs',
    'age': 18,
    'city': 'new york',
    }
print(acquaintance['first_name'])
print(acquaintance['last_name'])
print(acquaintance['age'])
print(acquaintance['city'])

6-2 喜欢的数字:

numbers = {
    'cat': 1,
    'dog': 2,
    'admin': 3,
    'fish': 4,
    'tiger': 5
    }
print('cat:' + str(numbers['cat']))
print('fish:' + str(numbers['fish']))
print('tiger:' + str(numbers['tiger']))
print('dog:' + str(numbers['dog']))
print('admin:' + str(numbers['admin']))

6-3 词汇表

glossary = {
    'if': '条件测试判断',
    'for': '循环',
    'list': '列表',
    'tuple': '元组',
    'int': '整型',
    }
print("if:" + glossary['if'])
print("for:" + glossary['for'])
print("list:" + glossary['list'])
print("tuple:" + glossary['tuple'])
print("int:" + glossary['int'])

6-4 词汇表2:

glossary = {
    'if': '条件测试判断',
    'for': '循环',
    'list': '列表',
    'tuple': '元组',
    'int': '整型',
    }
for key, value in glossary.items():
    print(key + ": " + value)
glossary["or"] = "或者"
glossary["and"] = "并且"
glossary["break"] = "跳出当前循环"
glossary["title"] = "以首字母大写显示"
glossary["float"] = "浮点数"
for key, value in glossary.items():
    print(key + ": " + value)

6-5 河流:

rivers = {
    'Rhine River': 'france',
    'Brahmaputra River': 'china',
    'the Pearl River': 'china',
    }
for key, value in rivers.items():
    print(key + "run through " + value)
print()
for key in rivers.keys():
    print(key)
print()
for value in set(rivers.values()):
    print(value)

6-6 调查:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
for name, language in favorite_languages.items():
    print(name.title() + "'s fvorite language is " + language.title() + ".")
peoples = ['jen', 'sarah', 'phil']
for key in favorite_languages.keys():
    print(key.title())
    if key in peoples:
        print("谢谢你参与调查!")
    else:
        print("邀请你参与调查!")

6-7 人:

people = {
    'steve': {
        'location': 'new york',
        'gender': 'man',
        'hobby': 'fishing',
        },
    'kate': {
        'location': 'hongkong',
        'gender': 'women',
        'hobby': 'shopping',
        },
    'dog': {
        'location': 'beijing',
        'gender': 'man',
        'hobby': 'dancing',
        },
    }
for people_name,people_info in people.items():
    print("peopleName: " + people_name.title())
    print("\tLocation: " + people_info['location'])
    print("\tGender: " + people_info['gender'])
    print("\tHobby: " + people_info['hobby'])

6-8 宠物:

pets = {
    '小红': {
        '类型': '泰迪',
        '主人': '张三',
        },
    '小白': {
        '类型': '鹦鹉',
        '主人': '李四',
        },
    '小强': {
        '类型': '恐龙',
        '主人': '王麻子',
        },
    }
for pet_name, pet_info in pets.items():
    print("petName: " + pet_name.title())
    print("\t类型: " + pet_info['类型'])
    print("\t主人: " + pet_info['主人'])

6-9 喜欢的地方:

favorite_places = {
    '张三': ['天安门', '长城'],
    '李四': ['九寨沟', '壶口瀑布'],
    '王麻子':['埃菲尔铁塔', '金字塔'],
    }
for people_name, people_info in favorite_places.items():
    print("peopleName: " + people_name.title())
    print("\tPlace: " + str(people_info))

6-10 喜欢的数字:

numbers = {
    'cat': [1, 2, 3],
    'dog': [3, 4, 6],
    'admin': [8, 9, 0],
    'fish': [1, 5, 8],
    'tiger': [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    }
for number_name, name_info in numbers.items():
    print("numberName: " + number_name.title())
    print("\tnumberInfo: " + str(name_info))

6-11 城市:

cities = {
    '北京': {
        '国家': 'china',
        '人口约数': 1370536875,
        '事实': '这是中国的首都',
        },
    '上海': {
        '国家': 'china',
        '人口约数': 1370536875,
        '事实': '这是中国最大的城市',
        },
    '香港': {
        '国家': 'china',
        '人口约数': 1370536875,
        '事实': '这是中国最发达的城市',
        },
    }
for city_name, city_info in cities.items():
    print("cityName: " + city_name.title())
    print("\tcityCountry: " + city_info['国家'])
    print("\tcityPopulation: " + str(city_info['人口约数']) + "人")
    print("\tcityFact: " + city_info['事实'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值