写一个简单字典
alien_0 = {"color":"green","point":5}
print(alien_0["color"])
print(alien_0["point"]
green
5
字典模拟现实情境,面向对象的思想融入其中。
使用字典
在python中,字典是一系列键-值对。每个键都对应一个值,你可以使用键来访问值。与键想关联的可以是字典,数字,字符,列表。任何python对象都可以用来当作字典的值。字典中键和值用冒号分隔,键-值对之间用逗号分隔。具体实例看上面代码。
访问字典中的值
要访问字典中的值,可以指定字典名和放在方括号之中的键。
alien_0 = {"color":"green","point":5}
print(alien_0["color"])
print(alien_0["point"])
添加键-值对
字典是一种动态结构,可随时在其中添加键-值对。要添加键-值对,可依次指定字典名,用括号括起来的键和后面相关联的值。
alien_0 = {"color":"green","point":5}
alien_0['x'] = 10
alien_0['y'] = 20
print(alien_0)
注意,键-值对的排列顺序可能和添加顺序不同,python不关心键-值对的顺序,只关心键和值之间的关联关系。这和列表是完全不一样的,列表如果没有了索引,根本没办法操作。
创建一个空字典
alien_0 = {}
alien_0['color'] = 'green'
alien_0['point'] = 5
在存储用户提供的数据或在编写能自动生成大量键-值对的代码时,通常都需要定义一个空字典。注意,字符一定得要用 " "或’ ',这种符号圈起,不然python会默认为变量的,这样会报错。
修改字典的值
要修改字典的值,可依次指定字典名,以及用括号括起来的键,还有与键关联的新值。
alien_0 = {"color":"green","point":5}
alien_0["color"] = "red"
alien_0["point"] = 8
print(alien_0)
删除键-值对
对于字典中不需要的信息,可以用del语句删除相应的键-值对(彻底删除)。使用del语句必须指定字典名和键。删除的对永远消失。
alien_0 = {"color":"green","point":5}
del alien_0["color"]
print(alien_0)
{'point':5}
有类似对象组成的字典
favorite_languages = {
'jm':"python",
'bob':'c',
'tom':'shell',
'sarah':'python',
}
多行定义字典,在花括号之后按回车,在tab缩进四个空格,在写键-值对,再加逗号,后面文本编辑器会自动缩进,在定义最后再加一个逗号,方便以后添加键-值对,然后花括号结尾。
遍历字典
遍历所有的键-值对
user_0 = {
'name':'bob',
'first':'enrico',
'last':'fermi',
}
for key,value in user_0.items():
print("\nKey:" + key)
print("Value:" + value)
items()方法能够把字典变成键值对列表。然后可以用两个变量来取键和值。字典遍历和列表不一样,取出来的顺序全看心情,不过不影响,只要键值对关联就行。这里的Key前面加了换行符,可以和后来循环的值区分。
遍历所有键
user_0 = {
'name':'bob',
'first':'enrico',
'last':'fermi',
}
for k in user_0.keys():
print(k)
name
first
last
for k in user_0:
print(k)
name
first
last
遍历字典时,会默认遍历所有的键,所以不用keys()方法也是可以的,输出依然不变。keys()和items()方法一样,都是返回一个列表,一个包含键,一个包含键-值对
。
按顺序遍历字典中的键
字典本无序,何必要强排,要是想强排,循环中排序。 —打油诗
favorite_languages = {
'jm':"python",
'bob':'c',
'tom':'shell',
'sarah':'python',
}
for name in sorted(favorite_languages.keys()):
print(name)
对取到的值使用sorted()进行排序,再循环取出。
遍历字典中的所有值
这个不用讲就是values()方法了,哈哈。也是返回一个列表,兄弟三都一样,items(),keys(),values()。
favorite_languages = {
'jm':"python",
'bob':'c',
'tom':'shell',
'sarah':'python',
}
for v in favorite_languages.values():
printa(v)
python
c
shell
python
for v in set(favorite_languages.values()):
print(v)
python
c
shell
如果不想有重复值,可以用集合(set)来提出重复项,达到每个元素独一无二的结果。set()踢出重复值很好用,不过返回的是集合!!!不是列表。
嵌套
字典列表
有时候需要把字典存储在列表中,看字面意思,什么列表,字典列表,本质还是列表。指针数组,数组指针,可以对比理解,程序员的逻辑。。。
alien0 = {'color':'green','point':5}
alien1 = {'color':'red','point':10}
alien2 = {'color':'yellow','point':15}
aliens = [alien0,alien1,alien2]
for alien in aliens:
print (alien)
首先创建了三个字典,表示三个外星人对象,然后把这三个外星人放到一个列表里面去,最后遍历列表。
字典中存储列表(列表字典)
为啥不叫列表字典,没大佬说,我自己这么叫。
students = {
'name':'bob',
'favorite_languages':['c','shell','python'],
}
for favorite_language in students['favorite_languages']:
print(favorite_language)
c
shell
python
当字典中一个键需要关联多个值的时候,就需要列表来帮助了。嵌入一个列表非常舒适。这里也可以在外面先定义一个sts的列表变量替换列表,让代码看起来更美观。
字典中嵌套字典
网站中存储很多用户信息,就需要字典存储字典出马。
users = {
'bob':{
'home':'changsha',
'likes':'c',
},
'tom':{
'home':'guangdong',
'like':'shell',
}
}
for name,messages in users.items():
print("\nName:" + name)
print(messages)
messages不是普通的字符变量,是列表,不能像上面一样连接。