学习笔记5(第六章:字典)

1、在Python中,字典是一系列键-值对。每个键都与一个值相关联,可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。

2、字典用放在花括号{}中的一系列键-值对表示,键和值之间用冒号分隔,键-值对之间用逗号隔开。

3、键-值对的排列顺序与添加顺序不同。Python不关心键-值对的添加顺序,而只关心键和值之间的关联关系。(笔者没有试验成功,但是书上是这样写的)

   创建一个空字典,添加元素:

alien_0 = {}
alien_0['x_position'] = 0
alien_0['y_position'] = 25
alien_0['speed'] = 'medium'
print(alien_0)

   输出的字典键-值顺序依然和添加一样,可能书上所说的是个例。

{'x_position': 0, 'y_position': 25, 'speed': 'medium'}

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

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

green

对于较长的列表和字典,可以分行。

favorite_languages = {
    'jier':'java',
    'juzi':'python',
    'tz':'csharp',
    }
print("jier's favourite language is"+
      favorite_languages['jier'].title()+
      ".")


jier's favourite language isJava.

5、用for循环来遍历字典。注意,遍历字典时,键-值对的返回顺序与存储顺序也不一定相同。

   遍历字典favorite_language:

for name,language in favorite_languages.items():
    print(name.title()+"'s favourite language is "+
      language.title()+".")

输出结果:

Jier's favourite language is Java.
Juzi's favourite language is Python.
Tz's favourite language is Csharp.

6、遍历字典中的所有键。

for name in favorite_languages.keys():
    print(name.title())

提取键,并存储到name变量中,再输出。遍历字典时,会默认遍历所有的键,因此,keys()方法可以省略,直接 for name in favourite_languages:,输出不变。添加了keys()可以让代码更加容易理解。 

Jier
Juzi
Tz

可以使用keys()确定某个人是否在字典中。

if 'erin' not in favorite_languages.keys():
    print("he isn't in ")

7、字典总是明确记录键和值之间的关联关系,但获取字典的元素时获取顺序是不可预测的。可以调用sorted()函数,让Python列出字典中的所有键,并在遍历前对这个列表进行排序。

for name in sorted(favorite_languages.keys()):
    print(name.title()+",thank you")

8、使用方法values(),返回一个值列表,而不包含任何键。这种做法提取字典中所有的值,但没有考虑是否有重复。为剔除重复项,可使用集合(set)。集合类似于列表,但每个元素都必须独一无二。

favorite_languages = {
    'jier':'java',
    'juzi':'python',
    'tz':'csharp',
    'xiao':'java'
    }
for language in set(favorite_languages.values()):
    print(language.title())

输出结果:

Csharp
Java
Python

9、将一系列字典存储在列表中,或将列表存储在字典中,这称为嵌套

   在列表中嵌套字典,使用rang()自动生成30个外星人:

# 创建一个用于存储外星人的空列表
aliens = []

# 创建30个绿色的外星人
for alien_number in range(30):
    new_alien = {'color': 'green', 'point': 5, 'speed': 'slow'}
    aliens.append(new_alien)

# 修改前三个外星人
for alien in aliens[0:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['point'] = 10

# 显示前五个外星人
for alien in aliens[:5]:
    print(alien)
print("...")

# 显示创建了多少个外星人
print("Total number of aliens:" + str(len(aliens)))

输出结果:

{'color': 'yellow', 'point': 10, 'speed': 'medium'}
{'color': 'yellow', 'point': 10, 'speed': 'medium'}
{'color': 'yellow', 'point': 10, 'speed': 'medium'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
...
Total number of aliens:30    

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

favorite_languages = {
    'jier': ['java', 'ruby'],
    'juzi': ['python', 'c'],
    'tz': ['csharp'],
    'xiao': ['java', 'c']
}
for name, languages in favorite_languages.items():
    if len(languages) > 1:
        print("\n" + name.title() + "'s favourite language are:")
    else:
        print("\n" + name.title() + "'s favourite language is:")
    for language in languages:
        print("\t" + language.title())

输出结果:

Jier's favourite language are:
Java
Ruby

Juzi's favourite language are:
Python
C

Tz's favourite language is:
Csharp

Xiao's favourite language are:
Java
C

 注意,与每个名字相关联的都是一个列表才可以用languages来依次存储字典中的每一个值。否则会得到的结果不是想要的。

11、在字典中存储字典。定义了一个users的字典,其中包含两个键:用户名‘aeinstein’和‘mcurie’。

users = {
    'asinstein':{
        '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:asinstein
    Full name:Albert Einstein
    Location:Princeton

Username:mcurie
    Full name:Marie Curie
    Location:Paris

 

猜你喜欢

转载自www.cnblogs.com/cathycheng/p/11180319.html
0条评论
添加一条新回复