python字典定义四个学生信息_python基础(四)字典Dictionary

字典dict是由键值对组成的无序数据集合,字典也被称作关联数组或哈希表。同list列表一样,其也是一种可变容器模型;同 list列表不同的是,list是以连续的整数做为索引,dict 字典则是以关键字做为索引。

每个键与值用冒号隔开(:)每对用逗号分割,整体放在花括号中({})。键必须独一无二,但值则不必。值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。

一、创建字典

方法1

>>> dict1 = {}

>>> dict2 = {'361way': 'com', 'port': 80}

>>> dict1, dict2

({}, {'port': 80, '361way': 'com'})

方法2

自动python2.2版本起,python dict也支持元素是列表的元组作为参数,如下:

>>> fdict = dict((['x', 1], ['y', 2]))

>>> fdict

{'y': 2, 'x': 1}

第1句中便于理解,可以将其分解为:tuple1=(['x', 1], ['y', 2]) ; fdict = dict(tuple1)  。而其经过内部处理过后,结果就变成了第3行。

同理,上面的元素是元组的列表作为参数,也可以通过dict转化为字典(关键是保证以键值对的格式出现):

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])

{'sape': 4139, 'jack': 4098, 'guido': 4127}

方法3

从Python 2.3 版本起, 可以用一个很方便的内建方法fromkeys() 来创建一个"默认"字典, 字典中元素具有相同的值 (如果没有给出, 默认为None )

>>> ddict = {}.fromkeys(('x', 'y'), -1)

>>> ddict

{'y': -1, 'x': -1}

>>>

>>> edict = {}.fromkeys(('foo', 'bar'))

>>> edict

{'foo': None, 'bar': None}

方法4

>>> dict(x=1, y=2)

{'y': 2, 'x': 1}

这里是属于建立一种映射关系的键值对。同时也可见python的dict创建是非常灵活的。

二、值与循环

访问单个值

>>> dict2 = {'361way': 'com', 'port': 80}

>>> dict2[361way]

Traceback (most recent call last):

File "", line 1, in

NameError: name '361way' is not defined

>>> dict2['361way'] //361way的引号不能少,不然会报错

'com'

遍历字典的键值

>>> dict2 = {'361way': 'com', 'port': 80}

>>>> for key in dict2.keys(): //自python2.2后,该句等价于for key in dict2:

... print 'key=%s, value=%s' % (key, dict2[key]) //注意缩进

输出结果:

key=361way, value=com

key=port, value=80

注意第二行,自python2.2后,直接使用字典名,默认指的是key值。这里的for循环也可以使用D.items()键值对的方式,如下:

>>>data = {"a" : 1, "b" : 2, "c" : 3}

>>>for k, v in data.items():

print(k, v)

...

('a', 1)

('c', 3)

('b', 2)

三、dict的内置方法

dict 字典有很多内置方法,字典可以进行比较运算、in操作、len计算 ,除之外,其常用的方法见下表(更多帮助可以通过help(dict)获得 ):

方法名字操作dict.clear()删除字典中所有元素

dict.copy()返回字典(浅复制)的一个副本

dict.del()删除字典中的某个键及其对应的值

dict.fromkeysc(seq,val=None)创建并返回一个新字典,以seq 中的元素做该字典的键,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为None)

dict.get(key,default=None)对字典dict 中的键key,返回它对应的值value,如果字典中不存在此键,则返回default 的值(注意,参数default 的默认值为None)

dict.has_key(key)如果键(key)在字典中存在,返回True,否则返回False. 在Python2.2版本引入in 和not in 后,此方法几乎已废弃不用了,但仍提供一个 可工作的接口。

dict.items()返回一个包含字典中(键, 值)对元组的列表

dict.keys()返回一个包含字典中键的列表

dict.values()返回一个包含字典中所有值的列表

dict.iter()方法iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代值(类似于内存中的位置),而不是一个列表。

dict.update()可以理解为求和、追加,将一个字典内的键值对,置于另一个字典内

dict.pop(key[, default])和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。

dict.setdefault(key,default=None)和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。

dict.setdefault(key,default=None)和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。

针对上表的内容,这里举几个示例:

del 删除

>>> systems = {"mac" : 1, "windows" : 5, "linux" : 1}

>>> del systems["windows"]

>>> systems

{'mac': 1, 'linux': 1}

copy操作

>>> original = {"box" : 1, "cat" : 2, "apple" : 5}

>>> modified = original.copy()

>>> id(original)

22626208

>>> id(modified)

22705152

>>> id(original)

22626208

>>> id(modified)

22705152

>>> modified["cat"] = 200

>>> original

{'box': 1, 'apple': 5, 'cat': 2}

>>> modified

{'box': 1, 'apple': 5, 'cat': 200}

从上面的例子中可以看出,copy操作不是将两个字典名称指向了同一内存地址 (通过id查看,其内存值不同)。通过修改copy集的值后,对原数据并没影响。

fromkeys创建字典

>>> d = dict.fromkeys('keys', '5') //这里keys不加引号会报错

>>> d

{'y': '5', 'k': '5', 'e': '5', 's': '5'}

注意上下的区别

>>> keys = ["bird", "plant", "fish"]

>>> d = dict.fromkeys(keys, 5) //这里不加引号不报错,此为keys值定义了

>>> d

{'plant': 5, 'bird': 5, 'fish': 5}

updater “ 追加 ”方法

由于dict里不存在‘‘+’’ 运算,不过其提供了update方法,但update方法和“+” 运算还是有曲别的。update方法的作用是将后者的键值对增加到前者里,如果前者的key值和后者key值相则,则后值的key对应的vaule值覆盖前者的vaule值,如下

>>> pets1 = {"cat": "feline", "dog": "canine"}

>>> pets2 = {"dog": "animal", "parakeet": "bird"}

>>> pets1.update(pets2)

>>> pets1

{'parakeet': 'bird', 'dog': 'animal', 'cat': 'feline'}

>>> pets2

{'dog': 'animal', 'parakeet': 'bird'}

以上示例,参考dotnetperls 站点(该站便于理解的图示化的东西,挺有意思) 。

四、总结

字典是python中比较常用的一种数据类型,其属于可变数据类型(同list相同,与tuple不同)。需要特别注意的是dict(字典)不存在分片与求和的概念,这点要和前面种的数据类型进行区分。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值