设为首页 加入收藏

TOP

10python字典(一)
2023-07-25 21:25:28 】 浏览:69
Tags:10python 字典

列表和字典的区别是列表可以通过索引来访问值,而字典可以通过名称来访问各个值。

字典这种数据结构称为映射(mapping),字典是Python中唯一内置映射类型,值不按照顺序排列,而是存储再键下面。
其中键可以是数字、字符串或元组等不可变数据类型。

字典的用途

字典的名称指出了这种数据结构的用途。日常生活中的字典和Python中的字典都能够轻松的通过单词(键)获取其定义的值。

  • 表示棋盘的分布,其中每个键都是由坐标组成的元组
  • 存储文件修改时间,其中的键为文件名
  • 数字电话/地址簿

通过列表查找数据:

>>> 
>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl']
>>> numbers = ['2341', '9102', '3158', '0142', '5551']
>>> numbers[names.index('Cecil')]  # 要查找Ceil的号码,通过列表的方式很麻烦
'3158'
>>>

创建和使用字典

上面查找电话号码的,可以通过创建一个字典实现。

>>> phonebook = {'Alice': '2314', 'Beth': '9102', 'Cecil': '3258'}
>>> phonebook['Alice']
'2314'
>>>

字典(dict)键(key)及其对应的值(value)组成,这种键-值对称为项(item)

在上面的示例中,键为名字,值为手机号。

每个键与值之间都是用冒号(:)分隔,项之间使用逗号分隔,整个字典放在大括号中。

空字典(没有任何项)用两个大括号表示,类似于 {}

在字典(以及其他映射类型)中,键必须是独一无二的,而字典中的值无此要求。

可以使用函数dict从其他映射(如其他字典)或键值对序列创建字典:

>>> 
>>> items = [('name', 'Gubmy'), ('age', 42)]
>>> d = dict(items) 
>>> d
{'name': 'Gubmy', 'age': 42}
>>> d['name']
'Gubmy'
>>>
>>> 
>>> d = dict(name='Gumby', age=42)   # 使用关键字实参创建字典
>>> d
{'name': 'Gumby', 'age': 42}
>>>

字典基本操作

字典的基本行为在很多方面类似于序列。

  • len(d)返回字典项(键值对)数
  • d[k]返回与k相关联的值
  • d[k] = v将值v关联到键k
  • del d[k]删除键为k的项
  • k in d检查字典d是否包含键位k的项

字典和列表有一些不同之处。

  • 键的类型:字典中键可以是整数,单并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串、元组。——字典的主要优点

  • 自动添加:即便是字典中原本没有键,也可以给他赋值,这将在字典中创建一个新项;但是如果不适用append或其他类似方法,就不能给列表中没有的元素赋值

  • 成员资格:表达式 k in d(其中 d是一个字典)查找的是键而不是值,而表达式 v in l(其中 l是一个列表)查找的是值而不是索引。其实字典中的键可以理解为列表中的索引,所以这里不一样。查字典中是否包含键的效率比检查列表中是否包含值更高,这也说明了数据结构越大效率差距就越大

    >>> 
    >>> x = []
    >>> x[42] = 'Foobar' # 因为空列表中没有索引42,所以会报错。定义的时候必须使用[None]*43才可以
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list assignment index out of range
    >>>
    >>> x = {}
    >>> x[42] = 'Foobar' # 空字典中可以给没有的键赋值,会生成新的item
    >>> x
    {42: 'Foobar'}
    >>>
    

创建电话簿数据库代码示例

# 一个简单的数据库

# 将一个人名用作键的字典,每个人都用一个字典表示
# 字典中包含键'phone'和'addr',它们分别与电话号码和地址相关联

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

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

name = input('Name: ')

# 要查找电话号码还是地址
request = input('Phone number (p) or address (a) ? ')

# 使用正确的键
if request == 'p':
  key = 'phone'
if request == 'a': key = 'addr'

# 仅当名字是字典中包含的键时才打印信息
if name in people:
      print("{}'s {} is {}.".format(name, labels[key], people[name][key]))
    

# Output
Name: Beth
Phone number (p) or address (a) ? p
Beth's phone number is 9102.

格式化引用字典

字符产格式化引用最常用的方法为format

同样可以通过在字典中存储一系列命名的值,可让格式设置更容易些。提取的时候只需在格式字符串中提取所需要的信息即可,使用format_map来指出你将通过一个映射来提供所需要的信息。

>> 
>>> phonebook = {'Alice': '2314', 'Beth': '9102', 'Cecil': '3258'}
>>> "Cecil's phone number is {Cecil}.".format_map(phonebook)
"Cecil's phone number is 3258."
>>>
>>>
>>>  # 只要所有的字段名称都包含在字典的键中,可以指定任意数量的转换说明符。如下:
template = '''
<html>
    <head>
        <title>
            {title}
        </title>
    </head>
    <body&g
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python装饰器实例讲解(一) 下一篇Python基础之网络编程:7、网络并..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目