(4) Python 内置类型 –- 字典

来源:互联网 发布:图像卷积算法介绍 编辑:程序博客网 时间:2024/06/05 02:06

  述:Python字典 –- 字典。字典是一种通过名字来引用值的结构,是Python中唯一内建的映射数据类型。字典是由一组组键值对组成的。键可以是数字,字符串甚至是元组;值是Python中的各种有效的数据类型。当索引不满足于我们的需求时,可以使用字典。

 

字典的创建

1.1快捷方式创建字典

1

2

3

4

>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

>>> phonebook

{'Beth': '9102', 'Alice': '2341', 'Ceil': '3258'}

 

1.2 dic函数

1

2

3

4

5

6

7

>>> items = [('name','Gumby'),('age',42)]

>>> d = dict(items)

>>> d

{'age': 42, 'name': 'Gumby'}

>>> d = dict(name='Gumby',age=42)

>>> d

{'age': 42, 'name': 'Gumby'}

 

 

基本字典操作

2.1 返回键值对的数量

1

2

3

4

5

>>> d = dict(name='Gumby',age=42)

>>> d

{'age': 42, 'name': 'Gumby'}

>>> len(d)

2

 

2.2 返回关联到键上的值

1

2

3

>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

>>> phonebook['Beth']

'9102'

 

2.3 将值关联到键上

1

2

3

4

>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

>>> phonebook['Beth'] = "5211314"

>>> phonebook

{'Beth': '5211314', 'Alice': '2341', 'Ceil': '3258'}

 

2.4 删除键值对

1

2

3

4

>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

>>> del phonebook['Beth']

>>> phonebook

{'Alice': '2341', 'Ceil': '3258'}

 

2.5 检查成员资格

1

2

3

4

>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

>>> 'Alice' in phonebook

True

>>> 

 

 

说明:

  1. 字典中的键可以是任意的不可变类型。
  2. 即使键不存在,也可以为它赋值,这样字典就会建立新的项。
  3. 成员资格查找的是键,而不是值。

 

1

2

3

4

>>> x= {}

>>> x[42] = "Hinata"

>>> x

{42: 'Hinata'}

 

2.6 字典的格式化字符串

在每一个转换说明符中的%字符后面,可以加上键,后面再跟上其他的元素说明。

1

2

3

>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

>>> "Alice's phone number is %(Alice)s" % phonebook

"Alice's phone number is 2341"

 

字典方法

3.1 clear

函数功能:清除字典中的所有的项。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

>>> name = {}

>>> name

{}

>>> name['name'] = 'Hinata'

>>> name['age'] = 16

>>> name

{'age': 16, 'name': 'Hinata'}

>>> return_value = name.clear()

>>> return_value

>>> name

{}

>>> print return_value

None

>>> 

 

3.2 copy

函数功能:返回一个具有相同键-值对的新字典,这个方法实现的是潜复制。

1

2

3

4

5

6

7

8

9

10

11

12

>>> person = {'name':'Hinata','machine':['foo','bar','baz']}

>>> person_cp = person.copy()

>>> person_cp['name'] = 'XLX'

>>> person

{'machine': ['foo', 'bar', 'baz'], 'name': 'Hinata'}

>>> person_cp

{'machine': ['foo', 'bar', 'baz'], 'name': 'XLX'}

>>> person_cp['machine'].remove('foo')

>>> person

{'machine': ['bar', 'baz'], 'name': 'Hinata'}

>>> person_cp

{'machine': ['bar', 'baz'], 'name': 'XLX'}

从上述代码可以看出,copy()函数只是复制了字典中值的引用,所以在修改person_cp中的列表中的时候,person随之改变。为避免这个问题,可以使用深复制。代码如下:

1

2

3

4

5

6

7

8

>>> from copy import deepcopy

>>> person = {'name':'Hinata','machine':['foo','bar','baz']}

>>> person_cp = deepcopy(person)

>>> person_cp['machine'].remove('foo')

>>> person

{'machine': ['foo', 'bar', 'baz'], 'name': 'Hinata'}

>>> person_cp

{'machine': ['bar', 'baz'], 'name': 'Hinata'}

 

3.3 fromkeys

函数功能:使用给定的键创建字典,每个键对应一个默认的值None

1

2

3

4

5

6

>>> person = dict.fromkeys(['name','age'])

>>> person

{'age': None, 'name': None}

>>> person = {}.fromkeys(['name','age','machine'])

>>> person

{'machine': None, 'age': None, 'name': None}

 

3.4 get

函数功能:访问字典项。当get访问一个不存在的键时,得到None值。

1

2

3

4

5

6

7

8

9

10

11

12

>>> person = {}

>>> print person['name']

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

KeyError: 'name'

>>> print person.get('name')

None

>>> print person.get('name','自己设置默认值')

自己设置默认值

>>> person['name'] = 'Hinata'

>>> print person.get('name','自己设置默认值')

Hinata

 

3.5 has_key

函数功能:检查字典中是否含有特定的键,相当于检查成员资格。

1

2

3

4

5

6

>>> person = {}

>>> person.has_key('name')

False

>>> person['name'] = 'hinata'

>>> person.has_key('name')

True

 

3.6 itemsiteritems

函数功能:

items: 将字典中的所有项以列表的方式返回。

    iteritems:  将字典中的所有项以迭代器的方式返回

1

2

3

4

5

6

7

>>> person = {'name':'Hinata','age':16}

>>> person.items()

[('age', 16), ('name', 'Hinata')]

>>> person.iteritems()

<dictionary-itemiterator object at 0x7f44131e0d08>

>>> list(person.iteritems())

[('age', 16), ('name', 'Hinata')]

 

3.7 keysiterkeys

函数功能:

keys:  将字典中的所有键以列表的方式返回。

    iterkeys:  将字典中的所有键以迭代器的方式返回

 

1

2

3

4

5

6

7

>>> person = {'name':'Hinata','age':16}

>>> person.keys()

['age', 'name']

>>> person.iterkeys()

<dictionary-keyiterator object at 0x7f44131e0d08>

>>> list(person.iterkeys())

['age', 'name']

 

3.8 pop

函数功能:pop返回对应于给定键的值,然后移除该键值对

1

2

3

4

5

>>> person = {'name':'Hinata','age':16}

>>> person.pop('age')

16

>>> person

{'name': 'Hinata'}

3.9 popitem

函数功能:弹出一个随机的键值对

1

2

3

4

5

>>> person = {'name':'Hinata','age':16}

>>> person.popitem()

('age', 16)

>>> person

{'name': 'Hinata'}

 

3.10 setdefault

函数功能:当键存在,则返回相应的值。当键不存在,则返回默认值并且相应地更新字典。

1

2

3

4

5

6

7

8

9

10

>>> person = {'name':'Hinata','age':16}

>>> person.setdefault('name')

'Hinata'

>>> person.setdefault('phone','5201314')

'5201314'

>>> person

{'phone': '5201314', 'age': 16, 'name': 'Hinata'}

>>> person.setdefault('lover')

>>> person

{'phone': '5201314', 'age': 16, 'name': 'Hinata', 'lover': None}

 

3.10 update

函数功能:利用一个字典更新另一个字典。提供的字典中的项会被添加到旧字典中,若有相同的键则会进行覆盖。

1

2

3

4

5

6

>>> person = {'name':'Hinata','age':16}

>>> person2 = {'name':'XLX','like':'cat'}

>>> person.update(person2)

>>> person

{'age': 16, 'name': 'XLX', 'like': 'cat'}

>>> 

 

3.11 values  itervalues

函数功能:

    values 以列表的形式返回字典中的值

    itervalues: 以迭代器的形式返回字典中的值

    返回的列表中可以有相同的元素

1

2

3

4

5

6

7

8

9

10

11

12

13

14

>>> d = {}

>>> d[1] = 5

>>> d[2] = 2

>>> d[3] = 0

>>> d[4] = 1

>>> d[5] = 3

>>> d[6] = 1

>>> d[7] = 4

>>> d.values()

[5, 2, 0, 1, 3, 1, 4]

>>> d.itervalues()

<dictionary-valueiterator object at 0x7f44131e0d08>

>>> list(d.itervalues())

[5, 2, 0, 1, 3, 1, 4]

 

 

 

0 0