python字典推导式 例子,【Python 2.7 3.1 新特 性】字典推导式(Dictionary comprehensions)...

12/20

2015

【Python 2.7 3.1 新特 性】字典推导式(Dictionary comprehensions)

L = [1,2,3,4,5,6,7,8,9]

要生成下面这样的字典:

{1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90}

以前需要这样:

dict([(v, v*10) for v in L])

现在可以直接这样:

{v: v*10 for v in L}

附录:

一、什么是字典?

字典是Python语言中唯一的映射类型。

映射类型对象里哈希值和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。

字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。

字典类型与序列类型的区别:

存取和访问数据的方式不同。

序列类型只用数字类型的键(从序列的开始按数值顺序索引);

映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直接或间接地和存储数据值相关联。

映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。

映射类型用键直接“映射”到值。

字典是Python中最强大的数据类型之一。

二、如何创建字典和给字典赋值

简单地说字典就是用大括号包裹的键值对的集合。(键值对也被称作项)

一般形式:

adict = {}

adict = {key1:value2, key2:value2, …}

或用dict()函数,如,adict = dict() 或 adict = dict((['x',1],['y',2]))。

关键字参数创建字典,如:

>>> adict = dict(name = 'allen', age = 40)

>>> adict

{'age': 40, 'name': 'allen'}

或用fromkeys()方法,如:

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

>>> adict

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

>>>

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

>>> adict

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

特点:

1、键与值用冒号“:”分开;

2、项与项用逗号“,”分开;

3、字典中的键必须是唯一的,而值可以不唯一。

>>> adict = {'name': 'allen', 'name': 'lucy', 'age': '40'}

>>> adict

{'age': '40', 'name': 'lucy'}

>>> bdict = {'name': 'allen', 'name2': 'allen', 'age': '40'}

>>> bdict

{'age': '40', 'name2': 'allen', 'name': 'allen'}

三、字典的基本操作

1、如何访问字典中的值?

>>> bdict['age']

32

>>> bdict['age2']

Traceback (most recent call last):

File "", line 1, in

KeyError: 'age2'

2、如何检查key是否在字典中?

a、has_key()方法

>>> bdict.has_key('age')

True

>>> bdict.has_key('age2')

False

b、in 、not in

>>> 'age' in bdict

True

>>> 'age2' in bdict

False

3、如何更新字典?

a、添加一个数据项(新元素)或键值对

>>> bdict

{'age': 32, 'name2': 'allen', 'name': 'allen'}

>>> bdict['address'] = 'address'

>>> bdict

{'age': 32, 'name2': 'allen', 'name': 'allen', 'address': 'address'}

b、更新一个数据项(元素)或键值对

>>> bdict

{'age': 32, 'name2': 'allen', 'name': 'allen', 'address': 'address'}

>>> bdict['age'] = 40

>>> bdict

{'age': 40, 'name2': 'allen', 'name': 'allen', 'address': 'address'}

c、删除一个数据项(元素)或键值对

>>> bdict

{'age': 40, 'name2': 'allen', 'name': 'allen', 'address': 'address'}

>>> del bdict['age']

>>> bdict

{'name2': 'allen', 'name': 'allen', 'address': 'address'}

>>> bdict.pop('name2')

'allen'

>>> bdict

{'name': 'allen', 'address': 'address'}

>>> del bdict

>>> bdict

Traceback (most recent call last):

File "", line 1, in

NameError: name 'bdict' is not defined

四、映射类型操作符

标准类型操作符(+,-,*,,<=,>=,==,!=,and,or, not)

a、字典不支持拼接和重复操作符(+,*)

>>> adict = {'age' : 30}

>>> bdict = {'age' : 40}

>>> adict < bdict

True

>>> adict > bdict

False

>>> adict <= bdict

True

>>> adict >= bdict

False

>>> adict and bdict

{'age': 40}

>>> adict or bdict

{'age': 30}

>>> not adict

False

b、字典的比较操作

1.先比较字典的长度也就是字典的元素个数

2.键比较

3.值比较

例子:

>>> adict = {}

>>> bdict = {'age': 30}

>>> cmp(adict, bdict)

-1

>>> adict = {'age' : 30}

>>> cmp(adict, bdict)

0

>>> adict = {'age' : 30, 'name' : 'name'}

>>> cmp(adict, bdict)

1

五、映射相关的函数

1、len() 返回字典的长度

2、hash() 返回对象的哈希值,可以用来判断一个对象能否用来作为字典的键

3、dict() 工厂函数,用来创建字典

六、字典的方法

1、adict.keys() 返回一个包含字典所有KEY的列表;

2、adict.values() 返回一个包含字典所有value的列表;

3、adict.items() 返回一个包含所有(键,值)元祖的列表;

4、adict.clear() 删除字典中的所有项或元素;

5、adict.copy() 返回一个字典浅拷贝的副本;

6、adict.fromkeys(seq, val=None) 创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(默认为None);

可惜这个方法有局限性,比如我希望给每个key值都赋予独一无二的value:

>>> adict.fromkeys([1,2,3], ['1', '2', '3'])

{1: ['1', '2', '3'], 2: ['1', '2', '3'], 3: ['1', '2', '3']}

是办不到的

7、adict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None);

8、adict.has_key(key) 如果key在字典中,返回True,否则返回False。 现在用in 、 not in;

9、adict.iteritems()、adict.iterkeys()、adict.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表;

10、adict.pop(key[,default])和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常;

11、adict.setdefault(key, default=None) 和set()方法相似,但如果字典中不存在Key键,由adict[key] = default为它赋值;

12、adict.update(bdict) 将字典bdict的键值对添加到字典adict中。

七、字典的遍历

1、遍历字典的key(键)

>>> adict = {'name': 'name', 'age': 20}

>>> for key in adict.keys():

... print key

...

age

name

2、遍历字典的value(值)

>>> for value in adict.values():

... print value

...

20

name

3、遍历字典的项(元素)

>>> for item in adict.items():

... print item

...

('age', 20)

('name', 'name')

4、遍历字典的key-value

>>> for item, value in adict.items():

... print 'key = %s, value = %s' %(item, value)

...

key = age, value = 20

key = name, value = name

>>> for item, value in adict.iteritems():

... print 'key = %s, value = %s' %(item, value)

...

key = age, value = 20

key = name, value = name

八、使用字典的注意事项

1、不能允许一键对应多个值;

2、键必须是可哈希的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值