第十四节 字典2

6.3 遍历字典

一个Python字典可能只包含几个键值对,也可能包含数百万个键值对。鉴于字典可能包含大量数据,Python支持对字典进行遍历。字典可用于以各种方式存储信息, 因此有多种遍历方式:可遍历字典的所有键值对,也可仅遍历键或值。

6.3.1 遍历所有键值对

探索各种遍历方法前,先来看一个新字典,它用于存储有关网站用户的信息。下面 的字典存储一名用户的用户名、名和姓:

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
    }

利用本章前面介绍过的知识,可访问user_0 的任何一项信息,但如果要获悉该用户字典中的所有信息,该如何办呢?可使用for 循环来遍历这个字典:

user.py

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
    }
for key, value in user_0.items(): ❶
    print(f"\nKey: {key}") ❷
    print(f"Value: {value}") ❸

如❶所示,要编写遍历字典的for 循环,可声明两个变量,用于存储键值对中的键和值。这两个变量可以使用任意名称。下面的代码使用了简单的变量名,这完全可行:

for k, v in user_0.items()

for 语句的第二部分包含字典名和方法items() (见❶),它返回一个键值对列表。接下来,for 循环依次将每个键值对赋给指定的两个变量。在本例中,使用这两个变量来打印每个键(见❷)及其相关联的值(见❸)。第一个函数调用print() 中的"\n" 确保在输出每个键值对前都插入一个空行:

Key: username
Value: efermi

Key: first
Value: enrico

Key: last
Value: fermi

在6.2.6节的示例favorite_languages.py中,字典存储的是不同人的同一种信息。 对于类似这样的字典,遍历所有的键值对很合适。如果遍历字典favorite_languages ,将得到其中每个人的姓名和喜欢的编程语言。由于该字典中的键都是人名,值都是语言,因此在循环中使用变量name 和language ,而不是key 和value 。这让人更容易明白循环的作用:

favorite_languages.py

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
for name, language in favorite_languages.items(): ❶
    print(f"{name.title()}'s favorite language is {language.title()}.") ❷

❶处的代码让Python遍历字典中的每个键值对,并将键赋给变量name,将值赋给变量language。这些描述性名称能够让人非常轻松地明白函数调用print()(见❷)是做什么的。

仅使用几行代码,就将全部调查结果显示出来了:

Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Python.

即便字典存储的是上千乃至上百万人的调查结果,这种循环也管用。

6.3.2 遍历字典中的所有键

在不需要使用字典中的值时,方法keys() 很有用。下面来遍历字典favorite_languages ,并将每个被调查者的名字都打印出来:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
for name in favorite_languages.keys():
    print(name.title())

❶处的代码行让Python提取字典favorite_languages 中的所有键,并依次将它们赋给变量name 。输出列出了每个被调查者的名字:

Jen
Sarah
Edward
Phil

遍历字典时,会默认遍历所有的键。因此,如果将上述代码中的:

for name in favorite_languages.keys():

替换为:

for name in favorite_languages:

输出将不变。

显式地使用方法keys() 可让代码更容易理解,你可以选择这样做,但是也可以省略它。

在这种循环中,可使用当前键来访问与之相关联的值。下面来打印两条消息,指出 两位朋友喜欢的语言。像前面一样遍历字典中的名字,但在名字为指定朋友的名字 时,打印一条消息,指出其喜欢的语言:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
friends = ['phil', 'sarah'] ❶
for name in favorite_languages.keys():
    print(f"Hi {name.title()}.")
    if name in friends: ❷
        language = favorite_languages[name].title() ❸
        print(f"\t{name.title()}, I see you love {language}!")

❶处创建了一个列表,其中包含要收到打印消息的朋友。在循环中,打印每个人的名字,并检查当前的名字是否在列表friends中(见❷)。如果在,就打印一句特殊的问候语,其中包含这位朋友喜欢的语言。为获悉朋友喜欢的语言,我们使用了字典名,并将变量name的当前值作为键(见❸)。

每个人的名字都会被打印,但只对朋友打特殊消息:

Hi Jen.
Hi Sarah.
    Sarah, I see you love C!
Hi Edward.
Hi Phil.
    Phil, I see you love Python!

还可使用方法keys() 确定某个人是否接受了调查。下面的代码确定Erin是否接受了调查:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
if 'erin' not in favorite_languages.keys(): ❶
    print("Erin, please take our poll!")

方法keys() 并非只能用于遍历:实际上,它返回一个列表,其中包含字典中的所有键。因此❶处的代码行只核实'erin'  是否包含在这个列表中。因为她并不包含在这个列表中,所以打印一条消息,邀请她参加调查:

Erin, please take our poll!

6.3.3 按特定顺序遍历字典中的所有键

从Python 3.7起,遍历字典时将按插入的顺序返回其中的元素。不过在有些情况下,你可能要按与此不同的顺序遍历字典。

要以特定顺序返回元素,一种办法是在for 循环中对返回的键进行排序。为此,可使用函数sorted() 来获得按特定顺序排列的键列表的副本:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
for name in sorted(favorite_languages.keys()):
    print(f"{name.title()}, thank you for taking the poll.")

这条for 语句类似于其他for 语句,不同之处是对方法dictionary.keys() 的结果调用了函数sorted() 。这让Python列出字典中的所有键,并在遍历前对这个列表进行排序。输出表明,按顺序显示了所有被调查者的名字:

Edward, thank you for taking the poll.
Jen, thank you for taking the poll.
Phil, thank you for taking the poll.
Sarah, thank you for taking the poll.

6.3.4 遍历字典中的所有值

如果主要对字典包含的值感兴趣,可使用方法values() 来返回一个值列表,不包含任何键。例如,假设我们想获得一个列表,其中只包含被调查者选择的各种语言,而不包含被调查者的名字,可以这样做:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
print("The following languages have been mentioned:")
for language in favorite_languages.values():
    print(language.title())

这条for 语句提取字典中的每个值,并将其依次赋给变量language 。通过打印这些值,就获得了一个包含被调查者所选择语言的列表:

The following languages have been mentioned:
Python
C
Ruby
Python

这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量重复项。为剔除重复项, 可使用集合(set)。集合中的每个元素都必须是独一无二的:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()): ❶
    print(language.title())

通过对包含重复元素的列表调用set() ,可让Python找出列表中独一无二的元素, 并使用这些元素来创建一个集合。❶处使用set() 来提取favorite_languages.values() 中不同的语言。

结果是一个不重复的列表,其中列出了被调查者提及的所有语言:

The following languages have been mentioned:
Ruby
Python
C

随着你更深入地学习Python,经常会发现它内置的功能可帮助你以希望的方式处理 数据。

注意可使用一对花括号直接创建集合,并在其中用逗号分隔元素:

>>> languages = {'python', 'ruby', 'python', 'c'}
>>> languages
{'ruby', 'python', 'c'}

集合和字典很容易混淆,因为它们都是用一对花括号定义的。当花括号内没有键值对时,定义的很可能是集合。不同于列表和字典,集合不会以特定的顺序 存储元素。

动手试一试

练习6-4:词汇表2

现在你知道了如何遍历字典,可以整理为完成练习6-3而编写的代码,将其中的一系列函数调用print() 替换为一个遍历字典中键和值的循环。确定该循环正确无误后,再在词汇表中添加5个Python术语。当你再次运行这个程序时,这些新术语及其含义将自动包含在输出中。

words = {
    'print':'打印',
    'input':'输入',
    'list':'列表',
    'string':'字符串',
    'import':'导入',
}
for word in words.keys():
    print(f"{word}:{words[word]}")

练习6-5:河流

创建一个字典,在其中存储三条重要河流及其流经的国家。例如,一个键值对可能是'nile': 'egypt' 。

  • 使用循环为每条河流打印一条消息,下面是一个例子。

The Nile runs through Egypt. 

  • 使用循环将该字典中每条河流的名字打印出来。
  • 使用循环将该字典包含的每个国家的名字打印出来。
rivers = {
    'nile':'egypt',
    'yellow_river':'china',
    'heng_river':'india'
}
for river in rivers.keys():
    print(f"The {river.title()} runs through {rivers[river].title()}.")

练习6-6:调查

在6.3.1节编写的程序favorite_languages.py中执行以下操作。

  • 创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人未包含在字典中。
  • 遍历这个人员名单。对于已参与调查的人,打印一条消息表示感谢;对于还未参与调查的人,打印一条消息邀请他参加。
favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
}
name_list = ['mike','jen','james','edward','lining']
for name in name_list:
    if name in favorite_languages.keys():
        print(f"{name.title()},Thank you for answer!")
    else:
        print(f"{name.title()},Would you like to join us?")

6.4 嵌套

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套 。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。正如下面的示例将演示的,嵌套是一项强大的功能。

6.4.1 字典列表

字典alien_0包含一个外星人的各种信息,但无法存储第二个外星人的信息,更别说屏幕上全部外星人的信息了。如何管理成群结队的外星人呢?一种办法是创建一个外星人列表,其中每个外星人都是一个字典,包含有关该外星人的各种信息。例如,下面的代码创建一个包含三个外星人的列表:

aliens.py

alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2] ❶
for alien in aliens:
    print(alien)

首先创建三个字典,其中每个字典都表示一个外星人。然后在❶处将这些字典都存储 到一个名为aliens 的列表中。最后,遍历这个列表,并将每个外星人都打印出来:

{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

更符合现实的情形是,外星人不止三个,且每个外星人都是使用代码自动生成的。 在下面的示例中,使用range() 生成了30个外星人:

# 创建一个用于存储外星人的空列表。
aliens = []
# 创建30个绿色的外星人。
for alien_number in range(30): ❶
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'} ❷
    aliens.append(new_alien) ❸
# 显示前5个外星人。
for alien in aliens[:5]: ❹
    print(alien)
print("...")
# 显示创建了多少个外星人。
print(f"Total number of aliens: {len(aliens)}") ❺

在本例中,首先创建一个空列表,用于存储接下来将创建的所有外星人。在❶处, range() 返回一系列数,其唯一的用途是告诉Python要重复这个循环多少次。每次执行这个循环时,都创建一个外星人(见❷),并将其附加到列表aliens 末尾(见❸)。在❹处,使用一个切片来打印前5个外星人。在❺处,打印列表的长度, 以证明确实创建了30个外星人:

{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...
Total number of aliens: 30

这些外星人都具有相同的特征,但在Python看来,每个外星人都是独立的,这让我 们能够独立地修改每个外星人。

在什么情况下需要处理成群结队的外星人呢?想象一下,可能随着游戏的进行,有些外星人会变色且加快移动速度。必要时,可使用for循环和if语句来修改某些外形人的颜色。例如,要将前三个外星人修改为黄色、速度为中等且值10分,可这样做:

# 创建一个用于存储外星人的空列表。
aliens = []
# 创建30个绿色的外星人。
for alien_number in range(30):
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_alien)
for alien in aliens[:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['points'] = 10
# 显示前5个外星人。
for alien in aliens[:5]:
    print(alien)
print("...")

鉴于要修改前三个外星人,我们遍历一个只包含这些外星人的切片。当前,所有外星人都是绿色的,但情况并非总是如此,因此编写一条if 语句来确保只修改绿色外星人。如果外星人是绿色的,就将其颜色改为'yellow' ,将其速度改为'medium' ,并将其分数改为10 ,如下面的输出所示:

{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...

可进一步扩展这个循环,在其中添加一个elif 代码块,将黄色外星人改为移动速度快且值15分的红色外星人,如下所示(这里只列出了循环,而没有列出整个程序):

for alien in aliens[0:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['points'] = 10
    elif alien['color'] == 'yellow':
        alien['color'] = 'red'
        alien['speed'] = 'fast'
        alien['points'] = 15

经常需要在列表中包含大量的字典,而其中每个字典都包含特定对象的众多信息。 例如,你可能需要为网站的每个用户创建一个字典(就像6.3.1节的user.py中那样),并将这些字典存储在一个名为users 的列表中。在这个列表中,所有字典的结构都相同,因此你可以遍历这个列表,并以相同的方式处理其中的每个字典。

6.4.2 在字典中存储列表

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,你如何描述顾客点的比萨呢?如果使用列表,只能存储要添加的比萨配料;但如果使用字典,就不仅可在其中包含配料列表,还可包含其他有关比萨的描述。

在下面的示例中,存储了比萨的两方面信息:外皮类型和配料列表。配料列表是一个与键'toppings' 相关联的值。要访问该列表,我们使用字典名和键'toppings' ,就像访问字典中的其他值一样。这将返回一个配料列表,而不是单个值:

pizza.py

# 存储所点比萨的信息。
pizza = {
    'crust': 'thick',
    'toppings': ['mushrooms', 'extra cheese'],
    } ❶
# 概述所点的比萨。
print(f"You ordered a {pizza['crust']}-crust pizza "
    "with the following toppings:") ❷
for topping in pizza['toppings']: ❸
    print(f"\t{topping}")

首先创建一个字典,其中存储了有关顾客所点比萨的信息(见❶)。在这个字典中, 一个键是'crust' ,与之相关联的值是字符串'thick' ;下一个键是'toppings' ,与之相关联的值是一个列表,其中存储了顾客要求添加的所有配料。制作前,我们概述了顾客所点的比萨(见❷)。如果函数调用print() 中的字符串很长,可以在合适的位置分行。只需要在每行末尾都加上引号,同时对于除第  一行外的其他各行,都在行首加上引号并缩进。这样,Python将自动合并圆括号内  的所有字符串。为打印配料,编写一个for 循环(见❸)。为访问配料列表,使用键'toppings' ,这样Python将从字典中提取配料列表。

下面的输出概述了要制作的比萨:

You ordered a thick-crust pizza with the following toppings:
mushrooms
extra cheese

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。在本章前面有关喜欢的编程语言的示例中,如果将每个人的回答都存储在一个列表中, 被调查者就可选择多种喜欢的语言。在这种情况下,当我们遍历字典时,与每个被调查者相关联的都是一个语言列表,而不是一种语言;因此,在遍历该字典的for 循环中,我们需要再使用一个for 循环来遍历与被调查者相关联的语言列表:

favorite_languages.py

favorite_languages = {
    'jen': ['python', 'ruby'],
    'sarah': ['c'],
    'edward': ['ruby', 'go'],
    'phil': ['python', 'haskell'],
    } ❶
for name, languages in favorite_languages.items(): ❷
    print(f"\n{name.title()}'s favorite languages are:")
    for language in languages: ❸
        print(f"\t{language.title()}")

如你所见,现在与每个名字相关联的值都是一个列表(见❶)。请注意,有些人喜欢的语言只有一种,而有些人有多种。遍历字典时(见❷),使用变量languages 来依次存储对字典中每个值的引用,因为我们知道这些值都是列表。在遍历字典的主循环中,使用了另一个for 循环(见❸)来遍历每个人喜欢的语言列表。现在,每个人想列出多少种喜欢的语言都可以:

Jen's favorite languages are:
Python
Ruby

Sarah's favorite languages are:
C

Edward's favorite languages are:
Ruby
Go

Phil's favorite languages are:
Python
Haskell

为进一步改进这个程序,可在遍历字典的for 循环开头添加一条if 语句,通过查看len(languages) 的值来确定当前的被调查者喜欢的语言是否有多种。如果他喜欢的语言有多种,就像以前一样显示输出;如果只有一种,就相应修改输出的措辞,如显示Sarah's favorite language is C 。

注意列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多, 很可能有更简单的解决方案。

6.4.3 在字典中存储字典

可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。例如,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。在下面的程序中, 存储了每位用户的三项信息:名、姓和居住地。为访问这些信息,我们遍历所有的 用户名,并访问与每个用户名相关联的信息字典:

many_users.py

users = {
    'aeinstein': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
        },
    'mcurie': {
        'first': 'marie',
        'last': 'curie',
        'location': 'paris',
        },
    }
for username, user_info in users.items(): ❶
    print(f"\nUsername: {username}") ❷
    full_name = f"{user_info['first']} {user_info['last']}" ❸
    location = user_info['location']
    print(f"\tFull name: {full_name.title()}") ❹
    print(f"\tLocation: {location.title()}")

首先定义一个名为users 的字典,其中包含两个键:用户名'aeinstein'和'mcurie' 。与每个键相关联的值都是一个字典,其中包含用户的名、姓和居住地。在❶处,遍历字典users ,让Python依次将每个键赋给变量username ,并依次将与当前键相关联的字典赋给变量user_info 。在循环内部的❷处,将用户名打印出来。

在❸处,开始访问内部的字典。变量user_info 包含用户信息字典,而该字典包含三个键:'first' 、'last' 和'location' 。对于每位用户,都使用这些键来生成整洁的姓名和居住地,然后打印有关用户的简要信息(见❹):

Username: aeinstein
Full name: Albert Einstein
Location: Princeton

Username: mcurie
Full name: Marie Curie
Location: Paris

请注意,表示每位用户的字典都具有相同的结构。虽然Python并没有这样的要求, 但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键, for 循环内部的代码将更复杂。

动手试一试

练习6-7:人们

在为完成练习6-1而编写的程序中,再创建两个表示人的字典,然后将这三个字典都存储在一个名为people 的列表中。遍历这个列表, 将其中每个人的所有信息都打印出来。

my_friend = {
    "my_friend1" : {
        'first_name':'yao',
        'last_name':'ming',
        'age':42,
        'city':'shanghai',
},
    "my_friend2" : {
        'first_name':'liu',
        'last_name':'xiang',
        'age':45,
        'city':'heilongjiang',
},
    "my_friend3" : {
        'first_name':'chen',
        'last_name':'meng',
        'age':22,
        'city':'shandong',
},
}
print(my_friend)

练习6-8:宠物  

创建多个表示宠物的字典,每个字典都包含宠物的类型及其主人的名字。将这些字典存储在一个名为pets 的列表中,再遍历该列表,并将有关每个宠物的所有信息都打印出来。

pet1 = {'type':'cat','master':'zhangfei',}
pet2 = {'type':'dog','master':'guanyu',}
pet3 = {'type':'pig','master':'liubei',}
pets = [pet1,pet2,pet3]
for pet in pets:
    print(pet)

练习6-9:喜欢的地方

创建一个名为favorite_places 的字典。在这个字典中,将三个人的名字用作键,并存储每个人喜欢的1~3个地方。为了让这个练习更有趣些,可以让一些朋友说出他们喜欢的几个地方。遍历这个字典,并  将其中每个人的名字及其喜欢的地方打印出来。

favorite_places = {
    'zhangfei':['changbanpo','pingyuanxian'],
    'guanyu':['jingzhou','luoyang','hulaoguan'],
    'liubei':['hanzhong','chengdu'],
}
for name,places in favorite_places.items():
    print(f"\n{name.title()}'s favorite places are :")
    for place in places:
        print(f"\t{place.title()}")

练习6-10:喜欢的数2

修改为完成练习6-2而编写的程序,让每个人都可以有多个喜欢的数,然后将每个人的名字及其喜欢的数打印出来。

favorite_numbers = {
    'mike':[23,21,33],
    'kobe':[24,8,32],
    'james':[23,35,1],
    'yaoming':[11,10],
    'paul':[10,8,6],
}
for name,numbers in favorite_numbers.items():
    print(f"{name.title()}'s favorite numbers are:")
    for number in numbers:
        print(number)

练习6-11:城市

创建一个名为cities 的字典,将三个城市名用作键。对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该城市的事实。在表示每座城市的字典中,应包含country 、population 和fact 等键。将每座城市的名字以及有关信息都打印出来。

cities = {
    'chengdu':{
        'country':'china',
        'population':8000000,
        'fact':'food_city',
},
    'london':{
        'country':'england',
        'population':4000000,
        'fact':'flog_city',
},
    'moscow':{
        'country':'russia',
        'population':5000000,
        'fact':'cold_city',
},
}
for city,city_info in cities.items():
    print(f"\nCity name:{city.title()}")
    print(f"\tCountry:{city_info['country'].title()}")
    print(f"\tPopulation:{city_info['population']}")
    print(f"\tFact:{city_info['fact']}")

练习6-12:扩展

本章的示例足够复杂,能以很多方式进行扩展。请对本章的一个示例进行扩展:添加键和值、调整程序要解决的问题或改进输出的格式。

6.5小结

在本章中,你学习了:

如何定义字典,以及如何使用存储在字典中的信息;

如何访 问和修改字典中的元素,以及如何遍历字典中的所有信息;

如何遍历字典中所有的 键值对、所有的键和所有的值;

如何在列表中嵌套字典、在字典中嵌套列表以及在 字典中嵌套字典。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值