Python基础——字典

一、何为字典?(类似于C语言中的结构体)

Python中的字典能够将相关信息关联起来,类似于C语言中的结构体,字典更能准确地为各种真实物体建模,能够高效的模拟现实中的情形。

比如,你可以创建一个表示人的字典,然后想在其中存储多少信息就存储多少信息:姓名、年龄、地址、职业以及要描述的任何方面。你还能够存储任意两种相关的信息,如一系列单词及其含义,一系列人名及其喜欢的数字,以及一系列山脉及其海拔等。

一个简单的字典:

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

结果:

二、使用字典

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

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

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

1、访问字典中的值

2、添加键-值对

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

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

 

注意,键-值对的排列顺序与添加顺序不同。

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

3、创建一个空字典 

有时候,在空字典中添加键-值对是为了方便,而有时候必须这样做。

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

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

 4、修改字典中的值

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

5、删除键-值对

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

注意:删除的键-值对永远消失了

6、由类似对象组成的字典 

前面的示例中,字典存储的是一个对象(游戏中的一个外星人)的多种信息,

但你也可以使用字典来存储众多对象的同一种信息

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

结果:

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

三、遍历字典

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

1、遍历所有的键-值对

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

结果:

2、遍历字典中的所有键,keys()方法 

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

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

结果:

 

 遍历字典时,会默认遍历所有的键。

但显式地使用方法keys()可以让代码更容易理解。

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

结果同上:

3、按顺序遍历字典中所有键 sorted()方法

字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。

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

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

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

结果:

4、遍历字典中的所有值 values()方法 

如果你感兴趣的是字典包含的值,可使用方法values(),它返回一个值列表,而不包含任何键。

favorite_language = {
	'jen': 'python',
	'sarah': 'C',
	'edward': 'ruby',
	'phil': 'python',
}
print("The following language hava been mentioned:")
for language in favorite_language.values():
	print(language.title())

结果:

以上做法提取字典中所有值,但没有考虑是否重复。

为剔除重复项,可以使用集合(set)。

集合类似于列表,但对每个元素都必须是独一无二的。

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

favorite_language = {
	'jen': 'python',
	'sarah': 'C',
	'edward': 'ruby',
	'phil': 'python',
}
print("The following language hava been mentioned:")
for language in set(favorite_language.values()):
	print(language.title())

结果:

四、嵌套 

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为“嵌套”。

我们可以在列表中嵌套字典,在字典中嵌套列表,甚至在字典中嵌套字典。

1、字典列表

字典相当于“个体”,字典列表相当于“集合”。

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)

结果:

2、在字典中存储列表

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

#存储披萨饼的信息
pizza = {
	'crust': 'thick',
	'toppings': ['mushroom','extra cheese'],
}
#概述所点的披萨
print("You ordered a "+pizza['crust'] + "-crust pizza "+
	  "with the following toppings:"
	  )
for topping in pizza['toppings']:
	print("\t" + topping)

 结果:

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

favorite_language = {
	'jen': ['python','ruby'],
	'sarah': ['C'],
	'edward': ['ruby','go'],
	'phil': ['python','haskell'],
}
for name,languages in favorite_language.items():
	print("\n" + name.title() + "'s favorite languages are:")
	for language in languages:
		print("\t" + language.title())

结果:

3、 在字典中存储字典

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

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())

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值