Python学习(五)字典

字典

1.一个简单的字典

现在想存储一个人的基本信息,比如姓名,年龄等信息,应该怎样存储呢?下面是一个简单的字典,存储了一个人的相关信息。

people_0 = {"name": "dana", "age": "18"}
print (people_0["name"])
print (people_0["age"])

结果

dana
18
2.使用字典

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

在Python中,字典用花括号{}中的一系列键值对表示,

键值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,键值对之间用逗号分隔。在字典中,想要存储多少个键值都可以。

2.1访问字典中的值

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

people_0 = {"name": "dana", "age": "18"}
print (people_0["name"])

结果

dana

这将返回字典people_0中与键"name"相关联的值。

2.2 添加键值对

字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名,用方括号括起来的键和相关联的值。

people_0 = {"name": "dana", "age": "18"}
people_0["gender"] = "female"
people_0["hobby"] = "music"
print (people_0)

结果

{'gender': 'female', 'age': '18', 'name': 'dana', 'hobby': 'music'}

Pyhton不关心键值对的添加顺序,只关心键和值之间的关联关系。

如果添加字典时重复添加一个key,或者在定义的时候就有一个重复的key会是什么情况

people_0 = {"name": "dana", "age": "18", "gender": "female","name":"david"}
for value in people_0.values():
    print (value)

结果

female
18
aaa

Python会覆盖掉相同的键的值。所以,在字典中,键永远都不会重复。

2.3 定义一个空字典

在空字典中添加键值对有时候是为了方便,有时候必须这样做。为此,可先使用一对空的花括号定义一个字典,再分别添加各个键值对。

people_0 = {}
people_0["gender"] = "female"
people_0["hobby"] = "music"

结果

{'gender': 'female', 'hobby': 'music'}

先定义一个字典,在程序运行期间动态的添加数据是很常见的事情。

2.4 修改字典中的值

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

people_0 = {"name": "dana", "age": "18"}
people_0["age"] = 20
print (people_0)

结果

{'age': 20, 'name': 'dana'}

可以看到,在修改键对应的值的时候,也可以直接修改值的类型。代码中就把字符串类型的"18",修改为了int类型的20。

2.5 删除键值对

对于字典中不再需要的信息,可使用del语句将相应的键值对彻底删除。使用del语句时,必须指定字典名和要删除的键。

people_0 = {"name": "dana", "age": "18"}
del people_0["age"]
print (people_0)

结果

{'name': 'dana'}

删除的键值对将永远的消失。

3.遍历字典

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

3.1 遍历所有的键值对
people_0 = {"name": "dana", "age": "18", "gender": "female"}
for key, value in people_0.items():
    print ("\nkey : " + key)
    print ("value : " + value)

结果


key : gender
value : female

key : age
value : 18

key : name
value : dana

要编写用于遍历字典的for循环,可声明两个变量,用于存储键值对中的键和值。对于这两个变量,可使用任何名称。

for k, v in people_0.items():

for语句包含字典名和方法名items(),它返回一个键值对列表。接下来,for循环依次将每个键值对存储到指定的两个变量中。

people_0 = {"name": "dana", "age": "18", "gender": "female"}
key_value_list = people_0.items()
for key, value in key_value_list:
    print ("\nkey : " + key)
    print ("value : " + value)

结果和上面代码一样。

值得注意的一点是,即便是遍历字典时,键值对的返回顺序也与存储的顺序不同。Python不关心键值对的存储顺序,而只跟踪键和值之间的关联关系。

3.2 遍历字典中的所有键

在不需要使用字典中的值时,调用keys()方法。

people_0 = {"name": "dana", "age": "18", "gender": "female"}
for key in people_0.keys():
    print ("\nkey : " + key)

结果

key : gender

key : age

key : name

Python提取字典people_0中的所有键,并依次将它们存储到变量key中,并进行输出。

同时,可以用获取到的键直接访问字典中的值。

people_0 = {"name": "dana", "age": "18", "gender": "female"}
for key in people_0.keys():
    if key == "name":
        print (people_0[key])

结果

dana

方法keys()和items()相似,实际上它返回一个列表,其中包含字典中的所有键。

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

字典明确的记录键和值之间的关系,但获取字典的元素时,获取顺序是不可预测的。这不是问题,因为通常想要的只是获取与键相关联的正确的值。

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

函数sorted()在Python学习(二)列表简介进行过使用。

people_0 = {"name": "dana", "age": "18", "gender": "female"}
key_list = people_0.keys()
for key in sorted(key_list):
    print (key)

结果

age
gender
name

对方法people_0.keys()的结果调用了函数sorted()。这让Python列出字典中所有键,并在遍历前对这个列表进行排序。

3.4 遍历字典中的所有值

想要获取字典中的所有的值,可使用方法values(),它返回一个值列表,而不包含任何键。

people_0 = {"name": "dana", "age": "18", "gender": "female"}
for value in people_0.values():
    print (value)

结果

female
18
dana

这样就提取了字典的所有值,但是没有考虑到值是否重复。涉及到值很少时,这也许不是问题,但如果值很多,最终的列表就有可能包含大量的重复值。为了剔除重复项,可使用集合set。集合类似于列表,但每个元素都必须是独一无二的。

people_0 = {"name": "dana", "age": "18", "gender": "female", "stage_name": "dana"}
for value in set(people_0.values()):
    print (value)

结果

18
female
dana

通过对包含重复元素的列表调用set(),可让Python找出列表中独一无二的元素,并使用这些元素创建一个新的集合。

4.嵌套

有时候,需要将一系列字典存储到列表中,或者将列表作为值存储到字典中,这称为嵌套。可以在列表中嵌套字典,在字典中嵌套列表甚至在字典中嵌套字典。

4.1字典列表
people_0 = {"name": "dana", "age": "18", "gender": "female"}
people_1 = {"name": "david", "age": "20", "gender": "male"}
people_2 = {"name": "bill", "age": "10", "gender": "male"}
peoples = [people_0, people_1, people_2]
for people in peoples:
    for key, value in people.items():
        print ("key:" + key + "\tvalue:" + value)
    print ("\n")

结果

key:gender	value:female
key:age	value:18
key:name	value:dana


key:gender	value:male
key:age	value:20
key:name	value:david


key:gender	value:male
key:age	value:10
key:name	value:bill

首先定义了三个字典,把这三个字典放入到peoples列表中。循环peoples列表,变量为people,

people其实指代的就是循环到的字典。people.items()返回的就是包含键值对的列表,又进行了for循环。打印每一个键值对。

在代码中经常需要在列表中包含大量的字典,而其中每个字典都包含特定对象的众多信息。

4.2 在字典中存储列表

有时候需要将列表存储早字典中,而不是将字典存储在列表中。

fruits = ["apple", "banana", "pear"]
balls = ["basketball", "football", "volleyball"]
computers = ["apple", "lenovo", "dell"]
map = {}
map["fruits"] = fruits
map["balls"] = balls
map["computers"] = computers
print (map)

结果

{'computers': ['apple', 'lenovo', 'dell'], 'balls': ['basketball', 'football', 'volleyball'], 'fruits': ['apple', 'banana', 'pear']}

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

4.3 在字典中存储字典

字典中嵌套字典,这样做的时候,会让代码很快的复杂起来。

people_0 = {"name": "dana", "age": "18", "gender": "female"}
people_1 = {"name": "david", "age": "20", "gender": "male"}
people_2 = {"name": "bill", "age": "10", "gender": "male"}
peoples = {}
peoples["dana"] = people_0
peoples["david"] = people_1
peoples["bill"] = people_2
print (peoples)
print (peoples["dana"])

结果

{'bill': {'gender': 'male', 'age': '10', 'name': 'bill'}, 'dana': {'gender': 'female', 'age': '18', 'name': 'dana'}, 'david': {'gender': 'male', 'age': '20', 'name': 'david'}}
{'gender': 'female', 'age': '18', 'name': 'dana'}

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值