`

python学习笔记5——第四章 字典

 
阅读更多

第四章  字典

 

1. 映射mapping——通过名字引用值的数据结构,字典是唯一内建的映射类型。可以使用任何不可变的对象标识元素,常用字符串和元组。

   key——value,可以是字符串、元组、数字

   创建字典

>>>直接创建
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}

>>>使用dict()函数创建
>>> items = [('name', 'Gumby'), ('age', 42)]   #1
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> 
>>> d = dict(name='Gumby', age=42)   #2
>>> d
{'age': 42, 'name': 'Gumby'}
>>> 
>>> dict()   #空字典
{}

 

2. 字典操作

>>> d = {'age': 42, 'name': 'Gumby'}
>>> a = len(d)  #长度
>>> a
2
>>> d['age']   #d[k]返回关联到键k上的值
42
>>> d['no'] = '123' #d[k]=v,将值v关联到键k上   


自动添加





>>> d
{'age': 42, 'name': 'Gumby', 'no': '123'}
>>> del d['no']  #del d[k] 删除键为k的项
>>> d
{'age': 42, 'name': 'Gumby'}
>>> 'age' in d  # k in d检查d中是否含有键为k的项,  注意是  



                        #  在字典中检查键的成员资格,比在列表中检查值的成员资格效率高
 True

>>> x = []   #空列表
>>> x[42] = 'Foobar'  #将值关联到一个并不存在的索引,报错,需要[None] * 43, x[42]='Foobar'才可
Traceback (most recent call last):
  File "<pyshell#125>", line 1, in <module>
    x[42] = 'Foobar'  #将值关联到一个并不存在的索引,报错
IndexError: list assignment index out of range

>>> x = {}  #空字典
>>> x[42] = 'Foobar'   #可以直接自动添加关联
>>> x
{42: 'Foobar'}
 

   完整示例

#简单数据库
#使用人名作为键的字典,每个人使用另一个字典来表示,其键'phone'和'addr'分别表示电话号码和地址

people = {
    'Alice':{
        'phone': '2341',
        'addr': 'Foo drive 23'
        },
    'Beth':{
        'phone': '9102',
        'addr': 'Bar street 42'
        },
    'Cecil':{
        'phone': '3158',
        'addr': 'Baz avenue 90'
        }
    }

#针对电话号码和地址使用的描述性标签,在输出时用到
labels = {
    'phone': 'phone number',
    'addr': 'address'
    }

name = raw_input('Name: ')

#查找电话号码还是地址,使用正确的按键
request = raw_input("Phone number (p) or address (a)? ")
if request == 'p': key = 'phone'
if request == 'a': key = 'addr'

#如果名字是字典中的有效键才打印信息
if name in people: print "%s's %s is %s." %(name, labels[key], people[name][key])

#运行结果
Name: Alice
Phone number (p) or address (a)? a
Alice's address is Foo drive 23.

 

3. 使用字典格式化字符串

>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}
>>> "Ceil's phone number is %(Ceil)s." %phonebook   #使用字典格式化的方法
"Ceil's phone number is 0123."

#例子
>>> template = '''<html>
    <head><title>%(title)s</title></head>
    <body>
    <h1>%(title)s</h1>
    <p>%(text)s</p>
    </body>
</html>'''
>>> data = {'title': 'My Home Page', 'text': 'Welcome to my homepage!'}
>>> print template %data
<html>
    <head><title>My Home Page</title></head>
    <body>
    <h1>My Home Page</h1>
    <p>Welcome to my homepage!</p>
    </body>
</html>

 

4. 字典方法

#(1)
>>> #clear()请空字典,无返回值或返回值为None
>>> #例1不使用clear()
>>> x = {}
>>> y = x    #x,y指向同一字典
>>> x['key'] = 'value'  #自动添加
>>> y
{'key': 'value'}
>>> x = {}   #x指向另一新的字典,而原字典不变,y仍指向原来的字典
>>> y
{'key': 'value'}

>>> #例2使用clear()
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x.clear()  #使用clear()清空了原始字典
>>> y
{}

#(2)
>>> #copy()浅复制,在副本中替换值时原始字典受影响,而修改受
>>> x = {'a': '1', 'b': ['2','3']}
>>> y = x.copy()
>>> y['a'] = '11'    #替换
>>> y['b'].remove('2')   #修改
>>> y
{'a': '11', 'b': ['3']}  #副本值替换,修改
>>> x 
{'a': '1', 'b': ['3']}  #原始字典只修改,不替换

#(3)深复制
>>> #copy模块中的deepcopy()
>>> from copy import deepcopy
>>> d = {}
>>> d['names'] = ['Alfred', 'Bertrand']  #原始字典
>>> d
{'names': ['Alfred', 'Bertrand']}
>>> c = d.copy();                               #浅复制
>>> dc = deepcopy(d)                       #深复制
>>> d['names'].append('Clive')          #对原字典修改
>>> c
{'names': ['Alfred', 'Bertrand', 'Clive']}  #浅复制也修改了
>>> dc
{'names': ['Alfred', 'Bertrand']}            #深复制未被修改

#(4)fromkeys
>>> #fromkeys使用给定的键建立新的字典,每个键对应的值默认为None
>>> {}.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> #法二
>>> dict.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> #可以修改默认值
>>> dict.fromkeys(['name', 'age'], 'Unknown')
{'age': 'Unknown', 'name': 'Unknown'}

#(5)get
>>> #通常使用不存在键访问时,会报错,但使用get方法,可以不报错
>>> d = {}
>>> print d['name']

Traceback (most recent call last):
  File "<pyshell#213>", line 1, in <module>
    print d['name']
KeyError: 'name'
>>> #使用get不会报错
>>> print d.get('name')
None
>>> #更改默认值
>>> d.get('name', 'N/A')
'N/A'
>>> #如果键存在,get用起来就像普通的字典查询
>>> d['name'] = 'Eric'
>>> d.get('name')
'Eric'

 

   使用get()的完整示例

# 使用get()的简单数据库
people = {
    'Alice':{
        'phone': '2341',
        'addr': 'Foo drive 23'
        },
    'Beth':{
        'phone': '9102',
        'addr': 'Bar street 42'
        },
    'Cecil':{
        'phone': '3158',
        'addr': 'Baz avenue 90'
        }
    }

#针对电话号码和地址使用的描述性标签,在输出时用到
labels = {
    'phone': 'phone number',
    'addr': 'address'
    }

name = raw_input('Name: ')

#查找电话号码还是地址,使用正确的按键
request = raw_input("Phone number (p) or address (a)? ")
key = request #新加内容,请求既不是'p'也不是'a'
if request == 'p': key = 'phone'
if request == 'a': key = 'addr'

#使用get()提供默认值
person = people.get(name, {}) #若输入的name不存在,则用空字典表示该person
label = labels.get(key, key)  #若用户输入的不是p或a,则将输入内容作为label
result = person.get(key, 'not available') #若key(即用户输入不存在),则输出notavailable

print "%s's %s is %s." %(name, label, result)

#运行结果
>>> 
Name: sun
Phone number (p) or address (a)? a
sun's address is not available.
>>> ================================ RESTART ================================
>>> 
Name: Alice
Phone number (p) or address (a)? p
Alice's phone number is 2341.
>>> ================================ RESTART ================================
>>> 
Name: Alice
Phone number (p) or address (a)? test
Alice's test is not available. 

 

   方法续

#(1)items
>>> #items将字典以列表形式返回
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}
>>> phonebook.items()
[('Beth', '9102'), ('Alice', '2341'), ('Ceil', '0123')]

#(2)iteritems
>>> #iteritems将字典以迭代器形式返回
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}
>>> it = phonebook.iteritems()
>>> it
<dictionary-itemiterator object at 0x01F145C0>
>>> list(it) #将literator(迭代器)转为list
[('Beth', '9102'), ('Alice', '2341'), ('Ceil', '0123')]

#(3)pop()
>>> #pop()根据键获得值并弹出,并从字典中删除键-值
>>> d = {'x':1, 'y':2}
>>> d.pop('x')
1                                        #根据键'x'查找值1,并弹出1
>>> d                                 #删除x--1之后的字典
{'y': 2}
>>> 
#(4)popitem()
>>> #popitem()随机弹出某项键-值
>>> d = {'1': 'a', '2': 'b', '3': 'c'}
>>> d.popitem()                            #随机弹出1---a
('1', 'a')
>>> d                                            #删除了1---a
{'3': 'c', '2': 'b'}
>>> 

#(5)setdefault() 类似get方法
>>> #setdefault()类似get(),根据键获取值,若无键则返回默认值None,默认值可重设
>>> d = {}
>>> print d.setdefault('name')  #不存在该键,返回默认值None
None
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d['name'] = 'Gumby'
>>> d.setdefault('name')
'Gumby'

#(6)update()
>>> #update()若键不存在则添加,存在则覆盖
>>> d = {'1': 'a', '2': 'b', '3': 'c'}
>>> x = {'3': 'cdef'}   
>>> d.update(x)                       #键‘3’存在,更改‘3’对应的值
>>> d
{'1': 'a', '3': 'cdef', '2': 'b'}

>>> y = {'4': 'test'}                    #键‘4’不存在,添加该键值对
>>> d.update(y)
>>> d
{'1': 'a', '3': 'cdef', '2': 'b', '4': 'test'} 

#(7)values()
>>> #values()以列表形式返回字典中的值,此列表可包含重复值
>>> d = {}
>>> d[1] = 1
>>> d[2] = 2
>>> d[3] = 3
>>> d
{1: 1, 2: 2, 3: 3}
>>> d.values()
[1, 2, 3] 

 

总结:

dict

分享到:
评论

相关推荐

    Python学习笔记.pdf

    **标题与描述解析:** "Python学习笔记.pdf" 的标题直接指出了文档的主题——Python的学习资料,而描述的重复表明该文档的主要内容即为Python的学习笔记。标签 "Python" 进一步强调了主题。 **知识点:** 1. **...

    Python进阶必备——HiKari为了拿捏Python整理的技术笔记

    本技术笔记专为有一定Python研发经验的开发者设计,旨在通过源码分析揭示Python的基础库和CPython的运行原理。 在第一章“数据对象与语言特性”中,我们将探讨以下关键知识点: 1. **列表(List)与元组(Tuple)...

    python学习笔记day4之set类型(csdn)————程序.pdf

    本篇笔记主要探讨了如何定义和操作Python的set类型,以及集合的主要用途。 首先,我们可以使用两种方式来创建集合。一种是使用大括号 `{}`,例如 `vars = {1, 2, 3, 'a', 1}`;另一种是通过 `set()` 函数,如 `vars...

    python开发总结——c程序员python之路

    #### Python学习资源推荐 为了更好地理解和掌握Python,以下是一些值得参考的学习资料: 1. **《Python参考手册》**:这本书详细介绍了Python的标准库以及各种特性,非常适合初学者用来了解Python的基本语法和功能...

    【精品分享】《Python编程从入门到实践》学习笔记——第二章 变量和简单数据类型

    第四章“操作列表”会涵盖如何对列表进行添加、删除、排序等操作。第五章“if语句”介绍条件控制,用于根据特定条件执行不同的代码块。第六章“字典”将带你了解另一种数据结构,它可以存储键值对。第七章“while...

    python入门笔记-李金(强烈推荐).zip

    **Python入门笔记——李金详解** 本篇笔记是基于作者李金的《python入门笔记-李金(强烈推荐)》的解析,旨在为初学者提供一份详尽的Python语言学习指南。这份笔记采用Jupyter Notebook的形式,使得学习过程更加...

    Python学习 —— 代码&amp;笔记(年11月30日、12月1日).zip

    【Python学习 —— 代码&笔记(年11月30日、12月1日)】 这篇笔记主要涵盖了在11月30日和12月1日期间进行的Python学习内容,其中包括了基本语法、数据结构、控制流程、函数、模块化编程等多个重要知识点。以下是...

    python——大作业.zip

    本压缩包"python——大作业.zip"包含了Python学习过程中的笔记和作业,旨在帮助用户复习巩固Python基础知识,并通过实践提升编程技能。 在Python的学习中,基础知识点主要包括以下几个方面: 1. **语法基础**:...

    python基础教程-学习笔记.zip

    这份“Python基础教程——学习笔记”涵盖了Python编程的基础知识,旨在帮助初学者快速入门。 1. **变量与数据类型** Python中的变量无需预先声明,可以直接赋值。支持的数据类型包括整型(int)、浮点型(float)...

    Tensorflow学习笔记 -Python 语法学习笔记一基本语法

    在Tensorflow的学习过程中,熟悉Python的基本语法至关重要。Python是一门高级编程语言,以其简洁明了的语法和强大的功能深受开发者喜爱。以下是对Python基础语法的一些关键点的详细讲解: 1. **新建及基本命令**: ...

    全套百度云教程:python基础+进阶+项目篇 (含Django和Tornado)

    5. **模块与包**:如何使用Python内置模块和第三方库。 6. **异常处理**:理解并处理程序运行中的错误和异常。 #### 二、Python进阶 在掌握了Python基础知识之后,接下来将深入学习更高级的主题,为实际项目开发...

    Python常用的内置序列结构(列表、元组、字典)学习笔记

    ### Python常用的内置序列结构(列表、元组、字典)学习笔记 在Python编程语言中,序列是一类非常重要的数据结构,它允许开发者以一种有序的方式存储和操作多个元素。Python提供了多种内置的序列类型,其中最常用的是...

    python学习笔记之列表(list)与元组(tuple)详解

    ### Python学习笔记之列表(List)与元组(Tuple)详解 #### 前言 本文旨在深入探讨Python中两种常用且极为重要的数据类型——列表(List)与元组(Tuple)。我们将从概念出发,逐步过渡到具体应用及两者之间的转换方式。 ...

    《“笨办法”学Python》的读书笔记和编程习题.zip

    这本书强调通过动手实践来学习编程,鼓励读者按照“笨办法”——即多做练习,少看理论——来逐渐掌握Python语言的基础和核心概念。 在Python编程的学习过程中,以下几个关键知识点是非常重要的: 1. **基础语法**...

    pythonLearning.pdf

    根据提供的文件信息,该文件名为“pythonLearning.pdf”,涉及的标签为“python”,且主要内容围绕着Python编程的学习笔记。文件的各个章节标题涵盖了Python基础语法、数据类型、操作符、分支与循环结构、条件语句...

    Python 编程基础:深度解析

    ” 是编程新手的第一个程序,也是学习任何编程语言时最经典的示例。在 Python 中,实现这个程序非常简单: ```python print("你好,世界!") ``` 除了使用 `print()` 函数之外,Python 还有一个鲜为人知的内置模块...

    note:学习笔记

    在"学习笔记"中,我们将会深入探讨Python的基础知识。 1. **变量与数据类型**:Python支持多种数据类型,包括整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。此外,还有列表(list)、元组(tuple...

Global site tag (gtag.js) - Google Analytics