请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 19952|回复: 16

【Python 第37课】 字典

[复制链接]

10

主题

0

好友

52

积分

注册会员

Rank: 2

发表于 2013-7-25 19:15:19 |显示全部楼层
本帖最后由 mty1111 于 2013-7-25 19:17 编辑

今天介绍一个python中的基本类型--字典(dictionary)。

字典这种数据结构有点像我们平常用的通讯录,有一个名字和这个名字对应的信息。在字典中,名字叫做“键”,对应的内容信息叫做“值”。字典就是一个键/值对的集合。

它的基本格式是(key是键,value是值):
  1. d = {key1 : value1, key2 : value2 }
复制代码
键/值对用冒号分割,每个对之间用逗号分割,整个字典包括在花括号中。

关于字典的键要注意的是:
1.键必须是唯一的;
2.键只能是简单对象,比如字符串、整数、浮点数、bool值。

list就不能作为键,但是可以作为值。

举个简单的字典例子:
  1. score = {   
  2.      '萧峰': 95,
  3.      '段誉': 97,
  4.      '虚竹': 89
  5. }
复制代码
python字典中的键/值对没有顺序,我们无法用索引访问字典中的某一项,而是要用键来访问。
  1. print score['段誉']
复制代码
注意,如果你的键是字符串,通过键访问的时候就需要加引号,如果是数字作为键则不用。


字典也可以通过for...in遍历:
  1. for name in score:
  2.     print score[name]
复制代码
注意,遍历的变量中存储的是字典的键。


如果要改变某一项的值,就直接给这一项赋值:
  1. score['虚竹'] = 91
复制代码
增加一项字典项的方法是,给一个新键赋值:
  1. score['慕容复'] = 88
复制代码
删除一项字典项的方法是del:
  1. del score['萧峰']
复制代码
注意,这个键必须已存在于字典中。


如果你想新建一个空的字典,只需要:
  1. d = {}
复制代码
0.jpg


#==== Crossin的编程教室 ====#
微信ID:crossincode
QQ群:312723402

面向零基础初学者的编程课
每天5分钟,轻松学编程

回复

使用道具 举报

0

主题

0

好友

88

积分

注册会员

Rank: 2

发表于 2013-8-24 19:38:24 |显示全部楼层
for name in score 中的name是什么?从何而来?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-8-26 21:10:57 |显示全部楼层
匠逍之岿 发表于 2013-8-24 19:38
for name in score 中的name是什么?从何而来?

name没有来处,这里就是name的定义之处。name被用在for...in...的循环体中,每次依次把score中的一项赋值给name
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

24

积分

新手上路

Rank: 1

发表于 2014-5-31 15:27:24 |显示全部楼层
本帖最后由 Go_for_Math 于 2014-5-31 15:40 编辑

发现,如果两个键同名但是值不同的话,输出的时候只会出一个,python内部是怎么决定哪一个值被盖掉的啊(好像保留最后一个)
直接
print score
会打出整个字典的内容,但是和我自己设置的顺序不一致,它内部是怎么排序的啊
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2014-5-31 15:58:24 |显示全部楼层
Go_for_Math 发表于 2014-5-31 15:27
发现,如果两个键同名但是值不同的话,输出的时候只会出一个,python内部是怎么决定哪一个值被盖掉的啊(好 ...

1.同key,后一个会覆盖前一个,这相当于给这个key赋值
2.字典本身无序。所以不必纠结它的顺序。如果要排序,需要用外部的方法。比如sort
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

36

积分

新手上路

Rank: 1

发表于 2015-3-14 16:53:53 |显示全部楼层
  1. #coding:utf-8
  2. learn = {'base':'python','middle':'linux','hight':'rust'}
  3. for i in learn :
  4.                 print i+'-------'+learn[i]
  5. learn['loser'] = 'zzx'
  6. print learn
  7. learn['loser'] = 'you'
  8. print learn
  9. del(learn['loser'])
  10. print learn
复制代码
回复

使用道具 举报

0

主题

0

好友

215

积分

中级会员

Rank: 3Rank: 3

发表于 2015-4-27 15:50:47 |显示全部楼层
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

发表于 2016-1-4 09:57:37 |显示全部楼层
get!
Python19.png
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

发表于 2016-7-23 21:47:44 |显示全部楼层
score = {   
     '萧峰': 95,
     '段誉': 97,
     '虚竹': 89
}

这个score我在2.7.11的IDLE无法保存,是怎么回事,谢谢
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-7-24 09:57:18 |显示全部楼层
vkshi 发表于 2016-7-23 21:47
score = {   
     '萧峰': 95,
     '段誉': 97,

你用了中文,代码开头第一行要加上编码设置
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-3-29 14:46 , Processed in 0.030027 second(s), 34 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部