python基本数据类型之字典

python中的字典是以键(key)值(value)对的形式储存数据,基本形式如下:

d = {'Bart': 95, 'Michael': 34, 'Lisa': 56}

整个字典用大括号表示,键值之间使用':'来连接。

字典的内置方法有:clear、copy、fromkeys、get、items、keys、pop、popitem、setdefault、update、values。

遍历方法

字典是可以用for循环进行遍历的。但是默认遍历的是key。

d = {
'name':'alex',
'age':18,
'gender':'male',
'married':True
} for i in d:
print(i)

打印结果:

name
age
gender
married

for循环在遍历时其实是在调用字典的keys()方法,该方法可以返回字典的key值。如果想遍历字典的values, 可以显式地调用values()方法:

for i in d.values():
print(i)

打印结果:

alex
18
male
True

也可以使用items(),该方法是将键和值同时取出来。

for i in d.items():
print(i)

打印结果:

('name', 'alex')
('age', 18)
('gender', 'male')
('married', True)

可以看到,每个键值对都形成一个元组。

设置与获取字典的键值

1、get方法

get方法可以根据传入的key值来获取对应的value。如果传入的key值不存在,则会返回None。

v = d.get('name')
print(v)
v1 = d.get('home')
print(v1)

打印结果:

alex
None

2、setdefault方法

同样,setdefault方法与get方法的用法基本一致,但是setdefault可以接收两个参数。

  • key 用来指定key值
  • default 用来为key值指定默认的value

    setdefault方法中传入的key如果存在,该方法就会返回对应的value值;如果key不存在,就会以key-default作为新的键值对存入字典。
v = d.setdefault('name', 'haha')
print(v) v1 = d.setdefault('home', 'hogwarts')
print(v1)
print(d)

打印结果:

alex
hogwarts
{'name': 'alex', 'age': 18, 'gender': 'male', 'married': True, 'home': 'hogwarts'}

可以看到,字典d中并没有'home'所对应的值,因此setdefault方法新建了一个键值对。default参数是个可选参数,setdefault方法可以仅传入一个key参数,字典中会增加一个key值,其对应的value为None。

v2 = d.setdefault('ID')
print(d)

打印结果:

{'name': 'alex', 'age': 18, 'gender': 'male', 'married': True, 'home': 'hogwarts', 'ID': None}

创建字典的方法

1、fromkeys方法

fromkeys方法可以接收序列类型,以序列中的元素作为键值对创建字典。该方法是静态方法(@staticmethod),也就是说它可以用类名直接调用。

d1 = dict.fromkeys([1, 2, 3, 4])
print(d1)

打印结果:

{1: None, 2: None, 3: None, 4: None}

当仅传入一个序列对象时,fromkeys方法会将该序列中的元素作为key,生成一个新的字典,而每个value为默认的None。

该方法还可以传入一个默认值,作为每个key的默认value。

d2 = dict.fromkeys([1, 2, 3, 4], 'haha')
print(d2)

打印结果:{1: 'haha', 2: 'haha', 3: 'haha', 4: 'haha'}

字符串同样也可以作为序列类型传入,该方法会将每个字符遍历出来作为新字典的key值。

d3 = dict.fromkeys('1234', 'gogo')
print(d3)

打印结果:{'1': 'gogo', '2': 'gogo', '3': 'gogo', '4': 'gogo'}

fromkeys方法只能接收两个参数,所以它可以创建一个只有默认value的字典。

更新、拷贝与删除

1、update方法

update方法可以更新字典中的键值对。

它接收两种类型的参数:字典和映射。

d = {
'name': 'alex',
'age': 18,
'gender': 'male',
'married': True
} # 第一种方式:将字典作为参数传入
d.update({'name': 'Tom', 'home': 'hangzhou'})
print(d)

打印结果:

{'name': 'Tom', 'age': 18, 'gender': 'male', 'married': True, 'home': 'hangzhou'}

可以看到,update方法会将传入参数中已存在的key所对应的value进行更新;如果key值不存在,则会在字典中创建新的键值对。

还有另一种传值方式,key=value:

d.update(name='Harry',eduyears=20)
print(d)

打印结果:

{'name': 'Harry', 'age': 18, 'gender': 'male', 'married': True, 'eduyears': 20}

可以采用key=value的方式对字典进行更新。使用这种方式时,传入的参数实际上被视为关键字参数进行处理,所以此时的key必须遵守变量的命名规则

2、copy方法

与列表中的copy方法一致,该方法也是复制一份字典,这种拷贝同样属于浅拷贝。参见关于深浅拷贝的文章。

3、clear、pop、popitem方法

clear方法是清空列表,pop方法用来删除字典中的键值对,但是字典中的pop方法必须指定所删除的key,返回值则是key所对应的value。

d = {
'name': 'alex',
'age': 18,
'gender': 'male',
'married': True
} v = d.pop('married')
print(v)

打印结果:True

popitem则是删除并返回字典的最后一项,它不需要任何参数。

d = {
'name': 'alex',
'age': 18,
'gender': 'male',
'married': True,
'eduyears': 16
} v1 = d.popitem()
print(v1) v2 = d.popitem()
print(v2)

打印结果:

('eduyears', 16)
('married', True)

python字典无序?有序?

默认情况下Python的字典输出顺序是按照键的创建顺序。

字典的无序是指,不能人为重新排序。

比如说你按键值1,2,3,4的顺序创建的字典,只能由解析器按创建顺序,还是1,2,3,4的输出。

你无法控制它按照4,3,2,1的顺序输出,你也无法做到1,3,2,4的顺序。

而且这个输出顺序是也不是能真正按照创建顺序可以控的。

这里面有两个影响因素:

(1)键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。

(2)字典空间扩容,当键的数量超过字典默认开的空间时,字典会做空间扩容,扩容后的键顺序和创建顺序就会发生变化,不受人为控制。

参考链接:https://www.cnblogs.com/yibeimingyue/p/9977164.html

python基本数据类型之字典的更多相关文章

  1. Python基础数据类型之字典

      基础数据类型之字典 ps:数据类型划分:可变数据类型和不可变数据类型. 不可变数据类型:元组(tupe).布尔值(bool).整数型(int).字符串(str).不可变数据类型也称为可哈希. 可变 ...

  2. Python - 基础数据类型 dict 字典

    字典简介 字典在 Python 里面是非常重要的数据类型,而且很常用 字典是以关键字(键)为索引,关键字(键)可以是任意不可变类型 字典由键和对应值成对组成,字典中所有的键值对放在 { } 中间,每一 ...

  3. python基础数据类型--dict 字典

    字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必 ...

  4. Python开发——数据类型【字典】

    字典的定义 # Python语言中唯一的类型映射 # 键与值之间用“:”分开 # 项与项之间用“,”分开 person = {"name":"yuan",&qu ...

  5. python基础数据类型之字典的操作

    一. 字典的简单介绍字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key- ...

  6. 第二周Python笔记 数据类型 列表 字典

    列表,拉锁式儿合并. [ [a,b] for a,b in zip(list1,list2)] #最笨的 a=[1,2,3,4,5] b=[2,3,4,5,6] d=[] for i in range ...

  7. python【数据类型:字典】

    字典的定义 infos = {'name':'张晓红','sex':'女','address':'上海','age':18} stus = {"name":"张三&quo ...

  8. Python基本数据类型之字典dict

    字典dict 是一个键(key)值(value)对,结构为{},大括号 创建字典 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 info = { # k ...

  9. Python基本数据类型之字典,集合,range

     注: ange()是python的内置函数,用于创建整数的列表,可以生成递增或者递减的数列.ange也是python的内置函数,用于创造xrange对象用于迭代. 在python3中,range() ...

随机推荐

  1. leetcode14:最长公共字符串

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  2. SpringMVC工作原理示意图

    上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中 ...

  3. gentoo emerge L10N

    gentoo 中安装软件的时候 emerge 提示 USE 中有 语言包可选安装,使用 L10N 来设置,设置方法是在USE中使用 l10n_,比如说 l10n_zh_CN 来安装中文支持包.

  4. uva-10041-水题

    题意:有个人想找到个房子住,并且他经常去其他街道,输入n条街,给这个人选择一条街,使得他去其他街道的距离总和最小. 排序,双重for #include <string> #include& ...

  5. 《面向对象程序设计(java)》第七周学习总结

    1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: (5)结合 ...

  6. python大法好——模块(内置模块未完)

    模块 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块. Python模块有什么作用? 1.模块内有许多函数方法,利用这些方法可以更简单的完成许多工作.2.模块 ...

  7. leetcode102

    本题是广度优先遍历(BFS)实现树的层次遍历,使用队列实现. class Solution { public: vector<vector<int>> levelOrder(T ...

  8. 异步请求Ajax(取得json数据)

    异步请求Ajax 没有学习Ajax之前请求数据的时候都是整个页面全部刷新了一次,也就是每次请求都会重新请求所有的资源.但是在很多时候不需要页面全部刷新,仅仅是需要页面的局部数据刷新即可,此时需要发送异 ...

  9. 【Noip模拟 20160929】划区灌溉

    题目描述 约翰的奶牛们发现山脊上的草特别美味.为了维持草的生长,约翰打算安装若干喷灌器. 为简化问题,山脊可以看成一维的数轴,长为L(1≤L≤1,000,000)L(1≤L≤1,000,000),而且 ...

  10. toString() 数组转字符串

    var monthNames = ['Jan', 'Feb', 'Mar', 'Apr']; var myVar = monthNames.toString(); // assigns "J ...