0 字典的独白

  1. 英文名:dict()
  2. 我是一种组合数据,没有顺序
  3. 我的数据以“键值对”的形式出现
  4. 键值对:
    1. 听上去有点像高中有机化学里的“化学键”,不过请放心,这里的“键”不会因为吸收能量而“断裂”
    2. 它更像是函数的映射,可以改变指向的值

1 字典的创建

  • 示例:
# 例1.1 创建空字典

d1_1 = {}
d1_2 = dict() print("d1_1 =", d1_1)
print("d1_2 =", d1_2)
  • 运行结果

d1_1 = {}

d1_2 = {}


# 例1.2 创建有值的字典
# 每一组数据用冒号隔开(冒号相当于“键”)
# 每一对键值对用逗号隔开 d1_3 = {"one":1, "two":2, "three":3}
d1_4 = dict({"one":1, "two":2, "three":3})
d1_5 = dict(one=1, two=2, three=3)
d1_6 = dict( [("one",1), ("two",2), ("three",3)]) print("d1_3 =", d1_3)
print("d1_4 =", d1_4)
print("d1_5 =", d1_5)
print("d1_6 =", d1_6)
  • 运行结果

d1_3 = {'one': 1, 'two': 2, 'three': 3}

d1_4 = {'one': 1, 'two': 2, 'three': 3}

d1_5 = {'one': 1, 'two': 2, 'three': 3}

d1_6 = {'one': 1, 'two': 2, 'three': 3}


2 字典的特性

  1. 字典是序列类型中的无序序列,所以不能分片和索引
  2. 字典中的数据每个都由键值对组成,即 kv 对
    • key:必须是可哈希的值,比如 int,string,float,tuple;但是 list,set,dict 不行
    • value:任何值

3 字典的常见操作

(1) 数据的访问、更改与删除

# 例2.1 访问数据

d2 = {"one":1, "two":2, "three":3}
print(d2["one"]) # 中括号内是键值
  • 运行结果

1


# 例2.2 更改数据;接着例2.1

d2["one"] = "一"
print(d2)
  • 运行结果

{'one': '一', 'two': 2, 'three': 3}


# 例2.3 使用 del 删除一组键值对;接着例2.2

del d2["one"]
print(d2)
  • 运行结果

{'two': 2, 'three': 3}


(2) 成员检测

# 例3 in
# 检测的是 key 的内容 d3 = {"one":1, "two":2, "three":3} if 2 in d3:
print("value") if "two" in d3:
print("key") if ("two",2) in d3:
print("kv")
  • 运行结果

key

也可以用 not in。


(3) 遍历

# 例4.1 for 循环跟着 key 走

d4 = {"one":1, "two":2, "three":3}

for k in d4:
print(k, "<-->", d4[k])
  • 运行结果

one <--> 1

two <--> 2

three <--> 3

字典的遍历在 Python2 与 Python3 中区别较大。挖个坑,日后填平,编号 Py016-1。


# 例4.2 例4.1 的代码可以改写成如下样子

for k in d4.keys():
print(k, d4[k]) for v in d4.values(): # 只访问字典的值
print(v) for k,v in d4.items():
print(k,'<-->',v)
  • 运行结果

one 1

two 2

three 3

1

2

3

one <--> 1

two <--> 2

three <--> 3


4 字典生成式

  • 少废话,上例子
# 例5

d5_1 = {"one":1, "two":2, "three":3}

d5_2 = {k:v for k,v in d5_1.items()}	# 常规字典生成式
print(d5_2) d5_3 = {k:v for k,v in d5_1.items() if v % 2 == 0} # 加限制条件的字典生成式
print(d5_3)
  • 运行结果

{'one': 1, 'two': 2, 'three': 3}

{'two': 2}


5 字典的内置方法


6 可供字典使用的其它方法/函数

(1) 测量君 len()

# 例6

d6 = {"one":1, "two":2, "three":3}
print(len(d6))
  • 运行结果

3


(2) 最值双子 max() & min()

# 例7.1

d7 = {"one":1, "two":2, "three":3}

print(max(d7))
print(min(d7))
  • 运行结果

two

one

小老弟,你怎么回事?翻车了?

不急,这是错误示范;当然,从 ASCII 码角度讲,t>o; w>h => two 为 max,同理,one 为 min。


# 例7.2

d7 = {"one":1, "two":2, "three":3}

key_max = max(d7, key=d7.get)		# get 见下面补充
key_min = min(d7, key=d7.get) print(key_max)
print(key_min)
  • 运行结果

three

one


(3) 补充:get(key, default=None)

  • 本想放到内置方法中去的,现在看来,得提前了
  • 释义:如果"键"在字典中,则返回键的值;否则,返回默认值
  • 示例:
# 例8.1

d8 = {"one":1, "two":2, "three":3}

print(d8.get("one"))
print(d8.get("four"))
  • 运行结果

1

None


  • 默认值的默认值为 None,不过可以自定义。
# 例8.2

d8 = {"one":1, "two":2, "three":3}
print(d8.get("four", "sorry"))
  • 运行结果

sorry


  • 注意不要画蛇添足
# 例8.3

d8 = {"one":1, "two":2, "three":3}
print(d8.get("four", default="sorry"))
  • 运行结果

TypeError……get() takes no keyword arguments

get() 不接受关键字参数。


(4) fromkeys(iterable, value=None)

  • 释义:创建一个新字典,由 iterable 中的键 和 value 设置的值构成,value 默认为 None
# 例9
# 使用指定的序列作为键,使用一个值作为字典所有键的值 l9 = ["one", "two", "three"] d9_1 = dict.fromkeys(l9)
d9_2 = dict.fromkeys(l9, "number") print(d9_1)
print(d9_2)
  • 运行结果

{'one': None, 'two': None, 'three': None}

{'one': 'number', 'two': 'number', 'three': 'number'}


(5) str(dict)

# 例10

d10 = {"one":1, "two":2, "three":3}
print(str(d10))
  • 运行结果

{'one': 1, 'two': 2, 'three': 3}

[Python3] 016 字典:给我一块硬盘,我可以写尽天下!的更多相关文章

  1. [Python3] 017 字典的内置方法

    目录 1. Python3 中如何查看 dict() 的内置方法 2. 少废话,上例子 (1) 清理大师 clear() (2) 拷贝君 copy() (3) get(key, default=Non ...

  2. RAID5当一块硬盘离线后处理

    RAID5当一块硬盘离线后,处理降级状态,这时候正常的建议是马上更换硬盘做REBUILD以恢复完整的数据状态,如果有热备盘的话,就会自动做REBUILD,这样做合适吗? 一组RAID卷在工作很长时间以 ...

  3. 【运维】浪潮服务器一块硬盘显示红色Offline(或者Failed)解决办法

    [写在前面]           最近服务器不知道为什么总是出现故障,以前戴尔服务器硬盘出现故障,也就是说硬盘旁边的灯显示为红色的时候,一般情况下都是表示硬盘坏掉了,直接买一块新的硬盘,将坏掉的硬盘拿 ...

  4. 新添加一块硬盘制作LVM卷并进行分区挂载

    linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载 ...

  5. 新加了一块硬盘,在bios中可以看的到,在系统的磁盘管理器中看不到新加硬盘

    今天新加了一块硬盘,进入bios中可以看到新加的硬盘,但是进入系统后在磁盘管理及磁盘驱动器中都看不到.并且在设备管理器下其他设备出现了ATA channel1,前面显示感叹号,如下图所示: 而且电脑变 ...

  6. 【linux】新添加一块硬盘制作LVM卷并进行分区挂载

    linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载 ...

  7. centos 7 增加一块硬盘的步骤

    1) 增加一块硬盘 1G [到设置中添加一块硬盘即可] 2) 重启一下服务器 lsblk -f 查看硬盘 3) 给 sdb 硬盘分区 fdisk /dev/sdb n,p,enter,enter,w ...

  8. linux新增一块硬盘加入原有分区

    原有硬盘空间已经不足,添加一块新硬盘,并且加入到原根目录下 查看新硬盘 1 2 fdisk -l Disk /dev/sdb: 240.1 GB, 240057409536 bytes 在新硬盘上创建 ...

  9. python3判断字典、列表、元组为空以及字典是否存在某个key的方法

    #!/usr/bin/python3 #False,0,'',[],{},()都可以视为假 m1=[] m2={} m3=() m4={"name":1,"age&quo ...

随机推荐

  1. Revolver Maps-3D地球仪网站定制

    这是个网站统计的小插件,大家可以看到那些国家,哪些城市对本网站进行了访问,很直观的一种表现方式. 这个小插件不需要你写任何代码,只需要去它官方网站定制你自己需要的代码.它的地址是:http://www ...

  2. PHP 图片合成、仿微信群头像

    PHP 图片合成.仿微信群头像 参考文章: 作者:凯歌~,php图片合成方法(多张图片合成一张). 经过测试,略作调整和注释,感谢分享. 欢迎提出改善优化意见! 示例代码: /** * 合成图片 * ...

  3. qt02 textEdit

    1.向QTextEdit中当前光标位置添加一行字符串message ui.messageTextEdit->textCursor().insertText(message+"\n&qu ...

  4. js倒计时功能中newData().getTime()在iOS下会报错,显示 nan

    最近在做移动端项目 ,有个设置开始时间和结束时间,然后倒计时 这个活动还有几天.在安卓上能正确转换时间,但在iOS上不能显示,为NaN-NaN1-NaN  Invalid Date, 就好比new D ...

  5. PHP环境安全性能检查

    PHP环境安全性能检查 PHP在Linux环境下安全配置是一个复杂的过程,其中涉及到很多的细节设置,在这里发出来一个脚本,通过这个脚本来检测你的PHP环境是否存在安全隐患,从而针对这些对你的PHP环境 ...

  6. webpack中require.context 用法

    1.require.context(directory, useSubdirectories = false, regExp = /^\.\//) Examples: require.context( ...

  7. React Native 之ScrollView

    import React, { Component } from 'react' import { Text, StyleSheet, View, Button ,TouchableOpacity,A ...

  8. ZeroMQ的进阶

    上一篇博文我们对ZeroMQ的经典模式做了写Demo让他跑起来了,但实际开发中我们可能面临一些远比上述复杂的场景.这时候我们需要进一步的对经典模式进行扩展,所幸ZeroMQ已经为我们做好了准备工作. ...

  9. [HG]walk 题解

    前言 学长博客划水,抄题解,差评. 于是我来重新写一篇正常的题解,虽然解法跟标程不一样,但是复杂度是一样的. 题面 题目描述 在比特镇一共有\(n\)个街区,编号依次为\(1\)到\(n\),它们之间 ...

  10. c++复习——临考前的女娲补天 >=.<

    一些零零散散的知识点... 1.抽象类只能作为其他类的基类,不能建立对象,但抽象类的派生类如果给出纯虚函数的函数体,这个派生类仍然是一个抽象类.//这个好理解 懂了 2.抽象类不能作为参数类型,函数的 ...