字典 在python中,字典是一系列键-值对。每个键都与一个值相关联,你可以使用键来访问相关联的值。相关联的值可以是数字、字符串、列表乃至字典。事实上可以将任何python对象用作字典中的值。
字典的形式是唯一的,但是向字典中添加内容时,是有逻辑的。
按照向字典中添加的内容,字典可以被分为两类:同一对象的不同属性的字典 + 相似对象的同一属性的字典。
字典的基础知识 创建与简单操作
创建字典
1 2 3 4 5 6 alien_0 = {'color' :'green' ,'point' :5 }print (alien_0)print (alien_0['color' ]) ---------------------------------------- {'color' : 'green' , 'point' : 5 } green
在python中,字典用{ }
表示;
每个键都与一个值相关联,键和值直接用:
隔开,键值对之间用,
隔开;
指定字典名和键名时,将返回其对应的值。
添加键-值对
1 2 3 4 5 alien_0['x_position' ] = 5 alien_0['y_position' ] = 20 print (alien_0) ---------------------------------------- {'color' : 'green' , 'point' : 5 , 'x_position' : 5 , 'y_position' : 20 }
修改键-值对
1 2 3 4 alien_0['x_position' ] = 0 print (alien_0) ---------------------------------------- {'color' : 'green' , 'point' : 5 , 'x_position' : 0 , 'y_position' : 20 }
删除键-值对或字典
1 2 3 4 5 del alien_0['point' ]print (alien_0)del alien_0 ------------------------------------------ {'color' : 'green' , 'x_position' : 0 , 'y_position' : 20 }
两类字典的逻辑 上述知识都只是字典的基础知识,在实际中,往往会遇到数量较大的字典创建,这时,我们常常会用到以下两种技巧。
同一对象不同属性字典的创建
1 2 3 4 5 6 7 8 alien_0 = {} alien_0['color' ] = 'green' alien_0['point' ] = 5 alien_0['x_position' ] = 0 alien_0['y_position' ] = 20 print (alien_0)
先创建一个空的字典,然后不断向里面增加新的键-值对。
类似对象同一属性的字典
1 2 3 4 5 6 7 favorite_languages = { 'jen' : "python" , 'sarah' : 'java' , 'edward' : 'c' , 'phil' : 'python' , }print (favorite_languages)
这种方法和最初的方法类似,只是结构要好一点,同时有一个细节:在最后一组键-值对后写上,
方便后续添加。
上面两代码,同时展现了两种类型的字典,这两种类型与现实世界一一对应。比如我们有时需要统计一个人的所用信息,有时需要统计一个学院各个班级的班长的姓名等。灵活运用字典,是对现实世界建模的关键。
遍历字典 与列表相同,字典也可以被遍历以便使用。同样使用FOR循环。
但是有一个细节,需要指定遍历字典的那一部分。
遍历字典中的键-值对(.items())
1 2 3 4 5 6 7 8 9 10 11 12 13 for key, value in alien_0.items(): print (key + ':' + str (value))for name, language in favorite_languages.items(): print (name + "'s favorite languages is " + language) ------------------------ color:green point:5 x_position:0 y_position:20 jen's favorite languages is python sarah' s favorite languages is java edward's favorite languages is c phil' s favorite languages is python
在遍历所有键和值时,需要使用.items()
指令,并指定进入for循环的两个变量,第一个变量对应键,第二个变量对应值;
原则上两个变量名可随意命名,但是,最好是遵循以下规则:
同一对象不同属性的字典使用变量名为:key,value
类似对象同一属性的字典使用变量名为可描述性的词
遍历字典中的键(.keys())
1 2 3 4 for key in alien_0.keys(): print (key)for name in favorite_languages.keys(): print ('name:' +name)
遍历字典中的值(.values())
1 2 3 4 for value in alien_0.values(): print (value)for language in favorite_languages.values(): print ('language:\t' +language)
字典嵌套 字典与列表之间的相互嵌套与字典之间的嵌套。
通过相互嵌套,完成对复杂事物的建模。
字典列表(在列表中存储字典)
大致是对同一对象不同属性的字典的扩展,多个对象都具有多个相同的属性
字典列表即包含字典的列表。
对某一个具体的对象,我们可以使用一个字典来包含它的全部信息,但是当需要使用多个具有相同特征的对象时,我们还能使用单纯的字典来表达吗?
比如,我们制作消灭外星人的游戏,一个外星人的所有信息比如颜色,大小,分值,位置等等可以放在一个字典里,但是,我们往往需要多个外星人,他们具有相同的属性,只是属性值是不相同的。这时我们需要用到字典列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 aliens = []for n in range (0 ,10 ): new_alien = { 'color' : 'green' , 'point' : 5 , 'x_position' : 0 , 'y_position' : 20 , } aliens.append(new_alien)for alien in aliens: print (alien)print ('total ' + str (len (aliens)) + ' rows' )for alien in aliens[3 :7 ]: alien['color' ] = 'blue' print (alien)for alien in aliens: print (alien)print ('total ' + str (len (aliens)) + ' rows' )for alien in aliens: if alien['color' ] == 'blue' : alien['x_position' ] = alien['x_position' ]+5 print (alien)
列表字典(在字典中存储列表)
大致是对类似对象相同属性的扩展,将相同属性的具体属性值拓展到多个
我们知道在字典中,一个键只能对应一个值,该值可以是数字、字符串、列表等等。
在上述例子中,我们都是一个键对应一个值(字符串或者数字),如果我们需要处理一个键对应多条字符串 之类的情况,比如上面 favorite_language 的例子,有一个人最爱两三个语言,该如何存储呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 favorite_languages = { 'jen' : ["python" ,'java' ], 'sarah' : ['java' ,'c' ], 'edward' : ['c' ], 'phil' : ['python' ], }for name, language in favorite_languages.items(): if len (language) == 1 : print ('\n' +name.title() + ' loves the language:' +language[0 ]) elif len (language) > 1 : print ('\n' +name.title()+'s favorite languages is:' ) for language in language: print ('\t' + language.title()) -------------------------------- Jens favorite languages is : Python Java Sarahs favorite languages is : Java C Edward loves the language:c Phil loves the language:python
字典字典(在字典中存储字典) 将同一个对象的所用信息存储到一个字典中,然后将对应多个对象的多个字典,以对象名为键,存储到一个字典中。
其逻辑与字典列表相同。都是在处理具有多个相同属性的多个对象的信息存储问题。
与字典列表相比,在字典中存储字典的代码更加复杂。但或许有时候不得不用呢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 cites = {} shijiazhuang = { 'location' :'hebei' , 'population' :1000 , } beijing = { 'location' :'beijing' , 'population' :10000 , } tianjin = { 'location' :'tianjin' , 'population' :800 } cites['shijiazhuang' ] = shijiazhuang cites['beijing' ] = beijing cites['tianjin' ] = tianjinfor cite, status in cites.items(): if status['population' ] >= 1000 : print ('\n' + cite + ' is big.' ) else : print ('\n' +cite+' is ok.' )