Crossin的编程教室

标题: 【Python 第37课】 字典 [打印本页]

作者: mty1111    时间: 2013-7-25 19:15
标题: 【Python 第37课】 字典
本帖最后由 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分钟,轻松学编程


作者: 匠逍之岿    时间: 2013-8-24 19:38
for name in score 中的name是什么?从何而来?
作者: crossin先生    时间: 2013-8-26 21:10
匠逍之岿 发表于 2013-8-24 19:38
for name in score 中的name是什么?从何而来?

name没有来处,这里就是name的定义之处。name被用在for...in...的循环体中,每次依次把score中的一项赋值给name
作者: Go_for_Math    时间: 2014-5-31 15:27
本帖最后由 Go_for_Math 于 2014-5-31 15:40 编辑

发现,如果两个键同名但是值不同的话,输出的时候只会出一个,python内部是怎么决定哪一个值被盖掉的啊(好像保留最后一个)
直接
print score
会打出整个字典的内容,但是和我自己设置的顺序不一致,它内部是怎么排序的啊
作者: crossin先生    时间: 2014-5-31 15:58
Go_for_Math 发表于 2014-5-31 15:27
发现,如果两个键同名但是值不同的话,输出的时候只会出一个,python内部是怎么决定哪一个值被盖掉的啊(好 ...

1.同key,后一个会覆盖前一个,这相当于给这个key赋值
2.字典本身无序。所以不必纠结它的顺序。如果要排序,需要用外部的方法。比如sort
作者: zzxomg    时间: 2015-3-14 16: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
复制代码

作者: cross    时间: 2015-4-27 15:50

作者: catherinemic    时间: 2016-1-4 09:57
get!

Python19.png (2.98 KB, 下载次数: 489)

Python19.png


作者: vkshi    时间: 2016-7-23 21:47
score = {   
     '萧峰': 95,
     '段誉': 97,
     '虚竹': 89
}

这个score我在2.7.11的IDLE无法保存,是怎么回事,谢谢
作者: crossin先生    时间: 2016-7-24 09:57
vkshi 发表于 2016-7-23 21:47
score = {   
     '萧峰': 95,
     '段誉': 97,

你用了中文,代码开头第一行要加上编码设置
作者: 王小勇    时间: 2016-8-5 11:02
sorce = {
    '语文': 84,
    '数学': 98,
    '英语': 93
}
# print(sorce['数学'])

sorce['语文'] = 96
sorce['政治'] = 88

print(sorce['政治'])

print(list(sorce))
del sorce['政治']
print(list(sorce))
for name in sorce:
    print(name,sorce[name])

打卡
作者: python弟弟    时间: 2018-2-24 15:32
crossin先生 发表于 2016-7-24 09:57
你用了中文,代码开头第一行要加上编码设置

请问这个编码设置有专门的章节讲吗?
作者: crossin先生    时间: 2018-2-25 15:42
python弟弟 发表于 2018-2-24 15:32
请问这个编码设置有专门的章节讲吗?

公众号回复 编码,有几篇文章
作者: 司南    时间: 2018-4-10 19:40
  1. score={
  2.     'xiao':97,
  3.     'duan':95,
  4.     'xu':89
  5.     }
  6. print(score['xiao'])

  7. for name in score:
  8.     print(score[name],end='')

  9. score['xu']=91
  10. score['mu']=80
  11. print(score)

  12. del score['xiao']
  13. for name in score:
  14.     print(name,score[name])
复制代码

作者: 司南    时间: 2018-5-5 21:38
  1. score={
  2.     '小峰':95,
  3.     '小段':97,
  4.     '小虚':89
  5.     }
  6. for name in score:
  7.     print(score[name])

  8. for name in score:
  9.     print(name,':',score[name])
复制代码
尴尬....最近忙着找工作和一些杂事,之前的东西有点遗忘了,再来扎实一下基础知识
作者: shan91    时间: 2018-7-26 10:14
这是代码的一部分,sum1和sum2都是数值,想将字典储存成文本,错误提示只接受str格式,尝试将sum1和sum2用str格式一下,还是不行。想问一下要如何储存?谢谢

QQ图片20180726100906.png (4.24 KB, 下载次数: 397)

QQ图片20180726100906.png


作者: crossin先生    时间: 2018-7-26 18:42
shan91 发表于 2018-7-26 10:14
这是代码的一部分,sum1和sum2都是数值,想将字典储存成文本,错误提示只接受str格式,尝试将sum1和sum2用s ...

读文件和写文件要分开
写文件要用 w 模式打开
close()后面要有括号

你再对照下写文件的例子




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5