『Python基础-10』字典


目录:

1.字典基本概念

2.字典键(key)的特性

3.字典的创建

4-7.字典的增删改查

8.遍历字典


1. 字典的基本概念

  • 字典一种key - value 的数据类型
  • Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。
  • Python字典可存储任意类型对象,如字符串、数字、元组、列表…… 优点:取值方便,速度快
  • 每个键与其值使用一个冒号(key:value; key:value; .......)分开,这些键-值对是使用逗号分隔的,整个字典项目用大括号括起来。
  • 空字典: 没有任何项目的空字典只用两个花括号写成:{}
  • 键在字典中是唯一的,而值可以不必是唯一的。字典的值可以是任何类型的,但是键必须是不可变的数据类型,例如字符串,数字或元组。


2.字典键的特性

字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
dict1 = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
print ("dict1['Name']: ", dict1['Name'])

输出结果:dict1['Name']: Manni

2)键必须不可变,所以可以用数,字符串或元组充当,所以用列表就不行,如下实例:
dict1 = {['Name']: 'Zara', 'Age': 7};
print ("dict1['Name']: ", dict1['Name'])

输出结果:dict1 = {['Name']: 'Zara', 'Age': 7}; TypeError: unhashable type: 'list'

unhashable,不可哈希, 如果我们简单点理解,某数据“不可哈希”(unhashable)就是其可变,如list/dict,都能原地修改,就是unhashable。可改变的数据结构 :字典dict,列表list,集合set. 字典也被称作关联数组或哈希表.


3. 创建字典

3.1) 直接赋值创建

字典由键(key)和对应值(value)成对组成。字典也被称作关联数组或哈希表。基本语法如下:

dict1 = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} #创建字典dict1

创建空字典:

使用字典来存储用户提供的数据或在编写能自动生成大量键—值对的代码时,通常都需要先 定义一个空字典:

dict1 = {}

注意:

-每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。

-键必须独一无二,但值则不必。

-值可以取任何数据类型,但必须是不可变的,如字符串,数组或元组。

3.2) 通过关键字dict和关键字参数创建

Python里有一个内建关键字dict, 可以直接使用这个关键字创建字典.

StuIfo = dict(name = "xiao ming",age = 12)
print(StuIfo,type(StuIfo))

运行结果:{'name': 'xiao ming', 'age': 12} <class 'dict'>

3.3) 通过二元组列表创建

list1 = [('Iphone',6999),('xiaomi',1999)]
phoneprice = dict(list1)
print(list1)
print(phoneprice,type(phoneprice))

运行结果:

[('Iphone', 6999), ('xiaomi', 1999)]
{'Iphone': 6999, 'xiaomi': 1999} <class 'dict'>

3.4) 通过dict和zip结合创建

dict3 = dict(zip('python',[1,2,3,4,5,6]))
print(dict3,type(dict))

运行结果:

{'p': 1, 'y': 2, 't': 3, 'h': 4, 'o': 5, 'n': 6} <class 'type'>

zip函数可以把两个对象结合在一起


4. 增: 给字典增加元素

4.1) 直接赋值来增加元素

字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用 方括号括起的键和相关联的值。

格式: 字典变量名['键(key)'] = 数据(value)

dict1 = {'color': 'green', 'points': 5}   #原列表
dict1['x_position'] = 0 #添加键值对:'x_position': 0
dict1['y_position'] = 55 #添加键值对: 'y_position': 55
print(dict1)

运行结果:{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 55}

[注意]:键—值对的排列顺序与添加顺序不同。Python不关心键—值对的添加顺序, 而只关心键和值之间的关联关系。

4.2) 用方法.update添加合并两个

利用一个字典项更新另一个字典。将一个字典里的项添加到另一个字典里,若两个字典里有相同的键,则更新其键对应的值。

语句:dict1.update(dict2)

dict4 = {"name":"xiao hong","age":12}
dict5 = {"class":1, "grade":3}
dict4.update(dict5)
print(dict4)
print(dict5)

运行结果:

{'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
{'class': 1, 'grade': 3} # 这个字典还是存在的


5. 删: 删除字典元素或字典

可以删除单个字典元素或清除字典的全部内容。也可以在单个操作中删除整个字典。

5.1) 使用del语句删除元素,或整个字典

要显式的删除某个元素或整个字典,只需使用del语句。

使用del语句后,再访问被删除的元素或字典,引发一个异常,因为用del后该元素或字典不再存在:

dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
del dict1['speed']
print(dict1['speed']) #运行后报错:KeyError: 'speed'
print(dict1) dict2 = {"name":"xiao hong","age":12}
del dict2
print(dict2) #运行后报错:NameError: name 'dict2' is not defined

运行结果:

KeyError: 'speed'
{'x_position': 0, 'y_position': 25}
NameError: name 'dict2' is not defined

5.2) 使用方法.clear()清空字典

移除字典里所有 items 。不接受任何参数,返回值为 None 。

再访问清空后的字典,会返回空字典.

使用 : 字典名.clear()

dict2 = {"name":"xiao hong","age":12}
result = dict2.clear()
print(result) #返回none
print(dict2) #返回空字典

运行结果:

None
{}

5.3) 使用方法.pop来删除指定元素, 会返回被删除的key所对应的值.

移除字典数据pop()方法的作用是:删除指定给定键所对应的值,返回这个值并从字典中把它移除。

若指定键不存在,一种情况程序会报错,另一种情况可以指定一个值作为返回值。

[注意]字典pop()方法与列表pop()方法作用完全不同。

dict2 = {"name":"xiao hong","age":12,'class': 1, 'grade': 3}
result1 = dict2.pop("age") #返回被删除的,age对应的值12
result2 = dict2.pop("age") #再次调用上次被pop删除的键值对, 直接打印输出,会报错. 运行后: result2 = dict2.pop("age"),KeyError: 'age'
result3 = dict2.pop("age","key didn't found") # 在指定key后,再指定一个该key不存在时的返回值,会返回这个设定值. 运行后:key didn't found
print(result1)
print(result2)
print(result3)
print(dict2)

运行结果:

12    #print(result1)
result2 = dict2.pop("age"),KeyError: 'age' #print(result2)
key didn't found #print(result3)
{'name': 'xiao hong', 'class': 1, 'grade': 3} #print(dict2)

5.4) 使用popitem()方法随机抛出一对键值对,并返回值. 不接受任何参数.

Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。

与列表的 pop 方法类似,但与之不同的是,由于字典是无序的,故是随机以(键,值)的形式抛出,并且返回(键,值)。不接受任何参数。

如果字典已经为,却调用了此方法,就报出KeyError异常

dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
result1 = dict1.popitem()
print(result1)

运行结果:('speed', 'medium')


6. 改: 修改字典内的元素

  • 通过关键字访问对应的值,然后重新赋值, 即为修改字典元素.
  • 字典是可变对象,支持原处修改,也就是ID不变
dict4 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
dict4['class']=2 #更改键值对class:1为class:2
print(dict4)

运行结果:

{'name': 'xiao hong', 'age': 12, 'class': 2, 'grade': 3}

7. 查: 查询(访问)字典

  • Python内置的字典类型,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
  • 字典可以像列表使用索引一样访问,但是字典使用的键,而非索引, 字典没有索引
  • 字典是可变对象,支持原处修改,也就是ID不变
dict1 = {'Name': 'Zara', 'Age': 7, `Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

运行结果:

dict['Name']:  Zara
dict['Age']: 7

[注意]如果用字典里没有的键访问数据,会报错. 可以使用.get方法,不会报错,会返回None,也可以指定返回值


8. 遍历字典

8.1) 遍历字典,只取[key]

  • for循环字典,默认遍历的是字典的key:

    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    for i in dict1:
    print(i)

    运行结果是:name age class grade

  • 也可以通过内置方法.keys()来遍历字典,遍历字典里所有的key.

    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    for key in dict1.keys():
    print(key)

    运行结果同上.

8.2) 遍历字典, 只取[value]

  • 遍历所有的value值,需要使用Python的内置方法.values()
    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    for x in dict1.values():
    print(x)

运行结果:xiao hong 12 1 3

8.3) 遍历字典, [key]值和[value]值都取

  • 1.先使用方法.items()获取一个列表,这个列表内的放的元素,存的是元祖形式的原字典的键值对.
  • 2.遍历这个列表,拿到可字典的key和value
    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    result = dict1.items()
    #print(result) #print(result)运行结果:dict_items([('name', 'xiao hong'), ('age', 12), ('class', 1), ('grade', 3)])
    for key,value in result: #key接收元祖里的第一个值,value接收元祖例的第二个值
    print(key,value)

8.4) 利用enumerate和下标控制遍历

  • enumerate()是python的内置函数,在字典上是枚举、列举的意思

  • enumerate可以获取遍历每一项的下标

  • 这样我们可以控制我遍历过程,可能有的时候不需要全遍历,可以利用它中断遍历

    dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
    for index, key in enumerate(dict1):
    if index == 2:
    break
    print(key) print("-------这是一条分隔线-----------------") for index,value in enumerate(dict1.values()): #遍历字典的value
    print(index,value) #获取位置下标和字典的value值

    运行结果:

    x_position
    y_position
    -------这是一条分隔线-----------------
    0 0
    1 25
    2 medium




------------Python内置字典函数功能------------

编号 函数 描述
1 cmp(dict1, dict2) 在Python 3中不再可用。
2 len(dict) 计算出字典的总长度。它将等于字典中的数据项数目。
3 str(dict) 生成字典的可打印字符串表示形式
4 type(variable) 返回传递变量的类型。如果传递变量是字典,那么它将返回一个字典类型。


------------Python内置字典方法------------

python 3.x 中字典的方法一共 11 种,用命令 dir(dict) 查看。每种方法的使用也可用 help(dict.clear) 查看。

编号 函数 描述
1 dict.clear() 删除字典dict的所有元素
2 dict.copy() 返回字典dict的浅拷贝
3 dict.fromkeys() 创建一个新的字典,其中包含seq的值和设置为value的值。
4 dict.get(key, default=None) 对于键(key)存在则返回其对应值,如果键不在字典中,则返回默认值
5 dict.has_key(key) 此方法已删除,使用in操作符代替
6 dict.items() 返回字典dict的(key,value)元组对的列表
7 dict.keys() 返回字典dict的键列表
8 dict.setdefault (key, default = None) 类似于get(),如果key不在字典dict中,则将执行赋值操作:dict [key] = default
9 dict.update(dict2) 将字典dict2的键值对添加到字典dict
10 dict.values() 返回字典dict的值列表


[参考]:

[扩展阅读]:


谢谢阅读!(#.#)

『Python基础-10』字典的更多相关文章

  1. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)

    # 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...

  2. 『Python基础-7』for循环 & while循环

    『Python基础-7』for循环 & while循环 目录: 循环语句 for循环 while循环 循环的控制语句: break,continue,pass for...else 和 whi ...

  3. 『Python基础-11』集合 (set)

    # 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...

  4. 『Python基础-8』列表

    『Python基础-8』列表 1. 列表的基本概念 列表让你能够在一个地方存储成组的信息,其中可以只包含几个 元素,也可以包含数百万个元素. 列表由一系列按特定顺序排列的元素组成.你可以创建包含字母表 ...

  5. 『Python基础-6』if语句, if-else语句

    # 『Python基础-6』if语句, if-else语句 目录: 条件测试 if语句 if-else语句 1. 条件测试 每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为 ...

  6. 『Python基础-5』数字,运算,转换

    『Python基础-5』数字,运算,转换 目录 基本的数字类型 二进制,八进制,十六进制 数字类型间的转换 数字运算 1. 数字类型 Python 数字数据类型用于存储数学上的值,比如整数.浮点数.复 ...

  7. 『Python基础-4』字符串

    # 『Python基础-4』字符串 目录 1.什么是字符串 2.修改字符串 2.1 修改字符串大小 2.2 合并(拼接)字符串 2.3 使用乘号'*'来实现字符串的叠加效果. 2.4 在字符串中添加空 ...

  8. 『Python基础-3』变量、定义变量、变量类型、关键字Python基础-3』变量、定义变量、变量类型、关键字

    『Python基础-3』变量.定义变量.变量类型.关键字 目录: 1.Python变量.变量的命名 2.变量的类型(Python数据类型) 3.Python关键字 1. Python 变量.变量的命名 ...

  9. 『Python基础-1 』 编程语言Python的基础背景知识

    #『Python基础-1 』 编程语言Python的基础背景知识 目录: 1.编程语言 1.1 什么是编程语言 1.2 编程语言的种类 1.3 常见的编程语言 1.4 编译型语言和解释型语言的对比 2 ...

随机推荐

  1. .Net中初探Redis

    一.简介 Redis是著名的NOSQL数据库,本质就是存储键值对结构的数据,为存储键值对数据做了优化,在大型网站中应用很多.Redis提供了数据的自动过期处理,因此适合存储临时数据. 和Redis类似 ...

  2. 【Leetcode】【Medium】Construct Binary Tree from Inorder and Postorder Traversal

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  3. windows10 如何关闭快速关机功能电源选项

    点击右下角的电池 -> power and sleep setting -> choose what the power buttons do -> change settings ...

  4. June 24th 2017 Week 25th Saturday

    Who is able to be egotistical needs to be strong too. 有本事任性的人,也要有本事坚强. What is egotistical? Is it th ...

  5. Manifold Learning: ISOMAP

    转:http://hi.baidu.com/chb_seaok/item/faa54786a3ddd1d7d1f8cd0b 在常见的降维方法中,PCA和LDA是最为常用的两种降维方法.PCA是一种无监 ...

  6. Python之条件判断和循环(入门4)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407755.html 本文出自:[Edwin博客园] Python之条件判断和循环 1. Python之if ...

  7. [译] 怎样(以及为什么要)保持你的 Git 提交记录的整洁

    最近在掘金翻译了一篇文章,主要讲的是 Git 提交记录的维护,确实很有用,感兴趣的同学可以去看一下.链接如下: [译] 怎样(以及为什么要)保持你的 Git 提交记录的整洁 截图:

  8. 关于Struts2中的ognl-2.6.11.jar和ognl-2.7.3.jar解决思路

    关于Struts2中的ognl-2.6.11.jar和ognl-2.7.3.jar建了一个简单的工程:导入的jar包有六个,包括commons-fileupload-1.2.1.jarcommons- ...

  9. CALayer & bitmap Content

    Working with High-Resolution Images Layers do not have any inherent knowledge of the resolution of t ...

  10. 匹配iPhoneX

    1.header中加一下标签 <meta name="viewport" content="width=device-width,initial-scale=1,m ...