天天看点

Python基础数据类型之字典Python基础数据类型之字典

Python基础数据类型之字典

字典(dict)能够将相关信息关联起来;

字典可存储的信息量几乎不受限制

一个简单的字典

字典用放在花括号 { } 中的一系列键 — 值对表示;

键 — 值对是两个相关联的值;

指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键 — 值对之间用逗号分隔;

在字典中,想存储多少个键 — 值对都可以

alien_0 = {'color':'green','points':5}
print(alien_0['color'])
print(alien_0['points'])
print(type(alien_0))
# green
# 5
# <class 'dict'>
           

使用字典

在Python中,字典是一系列键 — 值对;

每个键都与一个值相关联,可以使用键来访问与之相关联的值;

与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值;

访问字典中的值

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

alien_0 = {'color':'green','points':5}
print(alien_0['color'])
# green
           

添加键值对

字典是一种动态结构,可随时在其中添加键 — 值对;

要添加键 — 值对,可依次指定字典名、用方括号括起的键和相关联的值;

键 — 值对的排列顺序与添加顺序不同;

Python不关心键 — 值对的添加顺序,而只关心键和值之间的关联关系

alien_0 = {'color':'green','points':5}
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
# {'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}
           

先创建一个空字典

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

alien = {}
alien['color'] = 'green'
alien['points'] = '5'
print(alien)
# {'color': 'green', 'points': '5'}
           

修改字典中的值

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

alien_0 = {'color':'green','points':5}
alien_0['color'] = 'yellow'
print(alien_0)
# {'color':'yellow','points':5}
           

删除键—值对

del 语句:将相应的键—值对永久删除

alien_0 = {'color':'green','points':5}
del alien_0['points']
print(alien_0)
# {'color':'green'}
           

由类似对象组成的字典

确定需要使用多行来定义字典时,在输入左花括号后按回车键

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
print(favorite_languages)
print("Sarah's favorite language is " + favorite_languages['sarah'].title() + ".")
# {'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'python'}
# Sarah's favorite language is C.
           

遍历字典

可以使用循环来遍历字典,需要指定遍历方法;

下面将介绍遍历字典的方法

遍历所有的键—值对

使用 for 循环来遍历字典,在对字典使用 items() 方法;

声明两个变量,用于存储键 — 值对中的键和值。对于这两个变量,可使用任何名称;

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

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for name,language in favorite_languages.items():
    print(name.title() + "'s favorite language is " + language.title() + ".")
# Jen's favorite language is Python.
# Sarah's favorite language is C.
# Edward's favorite language is Ruby.
# Phil's favorite language is Python.
           

即便遍历字典时,键 — 值对的返回顺序也可能与存储顺序不同;

Python不关心键 — 值对的存储顺序,而只跟踪键和值之间的关联关系

遍历字典中的所有键

方法 keys() : 返回字典中的所有键

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

遍历字典时,会默认遍历所有的键,因此即使不使用方法 keys() ,输出也将不变;

使用方法 keys() 可以让代码更容易理解,也可以省略它 for name in favorite_languages:

方法 keys() 并非只能用于遍历;实际上,它返回一个列表,其中包含字典中的所有键

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

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

要以特定的顺序返回元素,一种办法是在 for 循环中对返回的键进行排序,

为此,可使用函数 sorted() 来获得按特定顺序排列的键列表的副本

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for name in sorted(favorite_languages.keys()):
    print(name.title() + ", thank you for taking the poll.")
# Erin, please take our poll!
# Edward, thank you for taking the poll.
# Jen, thank you for taking the poll.
# Phil, thank you for taking the poll.
           

遍历字典中所有的值

方法 values() : 返回一个值列表,而不包含任何键

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

剔除重复项

方法 set() : 剔除重复项

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for language in set(favorite_languages.values()):
    print(language.title())
# C
# Python
# Ruby
           

嵌套

将一系列字典存储在列表中,或将列表作为值存储在字典中,称为嵌套;

可以在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典

将字典存储在列表中

# 创建一个包含三个外星人的列表:
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)
# {'color': 'green', 'points': '5'}
# {'color': 'yellow', 'points': '10'}
# {'color': 'red', 'points': '15'}
           

将列表存储在字典中

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表.

pizza = {
    'crust' : 'thick',
    'toppings' : ['mushrooms','extra cheese'],
    }
print("You ordered a " + pizza['crust'] + "-crust pizza " +
      "with the follwing toppings:")
for topping in pizza['toppings']:
    print("\t" + topping)
# You ordered a thick-crust pizza with the follwing toppings:
#	  mushrooms
#	  extra cheese
           

将字典存储在字典中

可在字典中嵌套字典,但这样做时,代码可能很快复杂起来

例如,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值

users = {
    'aeinstein' : {
        'first' : 'albert',
        'last' : 'einstein',
        'location' : 'princeton',
        },
    'mcurie' : {
        'first' : 'marie' ,
        'last' : 'curie' ,
        'location' : 'paris' ,
        }
    }
for username,user_info in users.items():
    print("\nUsername: " + username)
    full_name = user_info['first'] + " " + user_info['last']
    location = user_info['location']
    print("\tFull name: " + full_name.title())
    print("\tLocation :" + location.title())
# Username: aeinstein
#	  Full name: Albert Einstein
#	  Location :Princeton

# Username: mcurie
# 	  Full name: Marie Curie
# 	  Location :Paris