第7章 字典


        字典是一种集合,但它不是序列。字典经常被视为映射集合,有时又被视为关联数组。字典可以看作成对元素构成的列表,其中每对中的第一个元素是,每对中的第二个元素是。在搜索字典时,首先查找键,然后才是关联的值。

1、创建

        字典的构造函数是dict,快捷方式是花括号{ }。

        当指定字典的内容时,单个的键值对由冒号(:)隔开。

>>> # dict函数创建
>>> items=[('name','Gumby'),('age',42)]
>>> d1=dict(items)
>>> d1
{'age': 42, 'name': 'Gumby'}
>>> d2=dict(name='Gumby',age=42)
>>> d2
{'age': 42, 'name': 'Gumby'}
>>> 
>>> # {}创建
>>> contacts={'bill':'353-1234','rich':'269-1234','jane':'352-1234'}
>>> contacts  # 字典中的元素是无序的
{'jane': '352-1234', 'bill': '353-1234', 'rich': '269-1234'}

        空字典的两种创建方式:

>>> oneDict={}  # 一对花括号{}创建
>>> oneDict
{}
>>> anotherDict=dict()  # 使用不带参数的构造函数dict创建
>>> anotherDict
{}

        注意事项

        (1)值可以是任何对象,但键只能是不可改变的对象(如,整数、字符串或元组)。

>>> dict1={['Name']:'Zara','Age':7]}  # 列表作为键
SyntaxError: invalid syntax
>>> dict1={['Name']:'Zara','Age':7}  # 列表作为键

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    dict1={['Name']:'Zara','Age':7}  # 列表作为键
TypeError: unhashable type: 'list'
>>> 
>>> dict2={'Name':'Zara','Age':[1,2,3]}  # 列表作为值
>>> 

        (2)键在一个字典中是唯一的,而值可能不是。

>>> dict3={'Name':'Zara','Age':[1,2,3],'Name':'Manni'}
>>> dict3['Name']  # 键重复,后一个值会被记住
'Manni'

2、索引和赋值

        字典不使用顺序的数字(0为第一个元素,-1为最后一个元素,以此类推)作为索引,而是使用键作为索引值。

        也可以通过对索引赋值来在字典中添加键值对。

        (1)字典是可变的

        在字典中可以对索引赋值,因此字典是第二个可变数据结构(第一个是列表)的例子。

>>> contacts={'bill':'353-1234','rich':'269-1234','jane':'352-1234'}
>>> contacts['rich']='467-1234' # 通过键修改值
>>> contacts
{'jane': '352-1234', 'bill': '353-1234', 'rich': '467-1234'}
>>> contacts['barb']='271-1234' # 添加新的键值对(注:键不能重复)
>>> contacts
{'jane': '352-1234', 'bill': '353-1234', 'barb': '271-1234', 'rich': '467-1234'}

        可以删除单个字典元素或清除字典中的全部内容。要删除整个字典,只要用del语句。

>>> contacts={'bill':'353-1234','rich':'269-1234','jane':'352-1234'}
>>> del contacts['bill'] # 删除键位‘bill’的元素
>>> contacts
{'jane': '352-1234', 'rich': '269-1234'}
>>> del contacts  # 删除整个字典
>>> contacts

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    contacts
NameError: name 'contacts' is not defined
>>> 

        (2)字典中不同的键类型

        字典有两个优势:第一个优势是索引速度快;第二个优势是值可以为任何类型的数据结构(甚至是另一个字典集合)。

        键可以是任何类型的不可变对象,不同类型的键可以用于同一字典中。

>>> demo={2:['a','b','c'],(2,4):27,'x':{1:2.5,'a':3}}
>>> demo
{'x': {'a': 3, 1: 2.5}, 2: ['a', 'b', 'c'], (2, 4): 27}
>>> demo[2] # 键:整数  值:列表
['a', 'b', 'c']
>>> demo[(2,4)] # 键:元组  值:整数
27
>>> demo['x']   # 键:字符串  值:字典
{'a': 3, 1: 2.5}
>>> demo['x'][1]  # 就相当于二维字典
2.5

3、运算符

     3.1 集合操作

        牢记:在字典的键值对中,键是关键,且字典是可变的。

        [ ]:在方括号中使用索引值

        len():“长度”是指字典中的键值对的个数

        in:成员测试,得到布尔值,键是否在字典中(而不是值)

        for:通过键在字典中进行循环

>>> myDict={'a':32,3:['x','y'],'joe':'smith'}
>>> myDict
{'a': 32, 3: ['x', 'y'], 'joe': 'smith'}
>>> myDict['a'] # 索引
32
>>> len(myDict) # 字典长度
3
>>> 'a' in myDict # 键是否在字典中
True
>>> 32 in myDict   # in只用于键,不用于值
False
>>> for key in myDict:
	print key,

	
a 3 joe
>>> for key in myDict:
	print key,myDict[key]

	
a 32
3 ['x', 'y']
joe smith
>>> 

     3.2 字典方法

        以下4种方法对字典特别有用,尤其是在字典中进行循环时。

        items():所有键值对的元组列表

        keys():所有键的列表

        values():所有值的列表

        copy():浅拷贝的字典

>>> myDict={'a':32,3:['x','y'],'joe':'smith'}
>>> for key,val in myDict.items():
	print key,val

	
a 32
3 ['x', 'y']
joe smith
>>> 
>>> myDict.keys()
['a', 3, 'joe']
>>> for key in myDict.keys():
	print key,

	
a 3 joe
>>> 
>>> myDict.values()
[32, ['x', 'y'], 'smith']
>>> for val in myDict.values():
	print val,

	
32 ['x', 'y'] smith
>>> 
>>> newDict=myDict.copy()  # 浅拷贝
>>> newDict['a']=7
>>> newDict
{'a': 7, 3: ['x', 'y'], 'joe': 'smith'}
>>> myDict  # 键———不可变的对象
{'a': 32, 3: ['x', 'y'], 'joe': 'smith'}
>>> newDict[3][0]='z'
>>> myDict  # 索引————可变对象
{'a': 32, 3: ['z', 'y'], 'joe': 'smith'}

4Python指针:使用zip创建字典

        zip是一个非常有趣且有用的运算符,它从两个序列中创建成对的元素。zip运算符像拉链一样,将多个序列合并成元组列表。它不是专门为字典而设置的,但与dict构造函数结合,能提供创建序列字典的有效方法。

>>> keys=["red","white","blue"]
>>> values=[100,300,500]
>>> d=dict(zip(keys,values))
>>> d
{'blue': 500, 'white': 300, 'red': 100}

        zip函数提供了另一种方法来交换键值对,但在只有值是不可改变的情况下,才能作为键交换。下面的会话交换了前面会话中的键值对:

>>> d
{'blue': 500, 'white': 300, 'red': 100}
>>> d2=dict(zip(d.values(),d.keys()))
>>> d2
{300: 'white', 500: 'blue', 100: 'red'}




参考文献:

1、《Python入门经典》

 2、Python字典


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值