____tz_zs

一、字典(dict)

字典类型(dict)是“键–值”数据项的组合,每个元素是一个键值对。如:身份证号(键)–个人信息(值)。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
字典类型的数据是无序的,字典类型数据通过映射查找数据项。

(一)创建 dict

  • 使用 dict() 函数
dict1 = {'a': 1, 'b': 2}
print(dict1)  # {'a': 1, 'b': 2}
dict2 = dict(a=1, b=2)
print(dict2)  # {'a': 1, 'b': 2}
dict3 = dict([('a', 1), ('b', 2)])
print(dict3)  # {'a': 1, 'b': 2}
  • 使用 dict.fromkeys()
    dict.fromkeys(可迭代对象,默认值)
asset_list = ['aa', 'bb', 'cc']
d = dict.fromkeys(asset_list, 0.)  #
print(d)  # {'aa': 0.0, 'bb': 0.0, 'cc': 0.0}
  • 字典生成式
# 两个列表 list 组合成字典 dict
d1 = {k: v for k in ['a', 'b', 'c'] for v in ['A', 'B', 'C']}  # 两两组合,错误方法,因为每个键对应一个值,在循环中,值'C' 将 值"B'和'A' 替换了
print(d1)  # {'a': 'C', 'c': 'C', 'b': 'C'}
d2 = {k: v for k, v in [('a', 'A'), ('b', 'B'), ('c', 'C')]}
print(d2)  # {'a': 'A', 'b': 'B', 'c': 'C'}
d3 = {k: v for k, v in zip(['a', 'b', 'c'], ['A', 'B', 'C'])}
print(d3)  # {'a': 'A', 'b': 'B', 'c': 'C'}# 关于zip() 函数
z = zip(['a', 'b', 'c'], ['A', 'B', 'C'])  # zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。
print(type(z))  # <class 'zip'>
print(z)  # <zip object at 0x000001C8505EE288>
l = list(z)  # list() 转换为列表
print(l)  # [('a', 'A'), ('b', 'B'), ('c', 'C')]# 多层循环创建 dict
print({k: {v: 1} for k in ['a', 'b', 'c'] for v in ['A', 'B', 'C']}) # 多级字典,错误方法
# {'b': {'C': 1}, 'c': {'C': 1}, 'a': {'C': 1}}
print({k: {v: 1 for v in ['A', 'B', 'C']} for k in ['a', 'b', 'c']}) # 多级字典
# {'b': {'B': 1, 'C': 1, 'A': 1}, 'c': {'B': 1, 'C': 1, 'A': 1}, 'a': {'B': 1, 'C': 1, 'A': 1}}
  • 字典生成式的一些使用
tag_list = [{"price": "1.1", "value": "100", "signal": True},{"price": "1.2", "value": "200", "signal": True},{"price": "1.3", "value": "300", "signal": False}]
# 筛选字典
format_tag1 = [{k: v for k, v in d.items()} for d in tag_list if d["signal"] is True]
print(format_tag1)  # [{'price': '1.1', 'value': '100', 'signal': True}, {'price': '1.2', 'value': '200', 'signal': True}]
# 修改字典中的数据
format_tag2 = [{k: float(v) for k, v in d.items()} for d in tag_list]
print(format_tag2)  # [{'price': 1.1, 'value': 100.0, 'signal': 1.0}, {'price': 1.2, 'value': 200.0, 'signal': 1.0}, {'price': 1.3, 'value': 300.0, 'signal': 0.0}]
format_tag3 = [{k: float(v) if not isinstance(v, bool) else v for k, v in d.items()} for d in tag_list]
print(format_tag3)  # [{'price': 1.1, 'value': 100.0, 'signal': True}, {'price': 1.2, 'value': 200.0, 'signal': True}, {'price': 1.3, 'value': 300.0, 'signal': False}]
format_tag4 = [{k if k != "signal" else k.upper(): float(v) if not isinstance(v, bool) else v for k, v in d.items()} for d in tag_list]
print(format_tag4)  # [{'price': 1.1, 'value': 100.0, 'SIGNAL': True}, {'price': 1.2, 'value': 200.0, 'SIGNAL': True}, {'price': 1.3, 'value': 300.0, 'SIGNAL': False}]
  • 使用 df 创建字典
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""import numpy as np
import pandas as pd
import matplotlib.pyplot as pltlist_l = [[1, 3, 3, 5, 4.], [11, 7, 15, 13, 9.1], [4, 2, 7, 9, 3.5], [15, 11, 12, 6, 11.1]]
index = ["2018-07-01", "2018-07-02", "2018-07-03", "2018-07-04"]
col = ['a', 'b', 'c', 'd', 'e']
df = pd.DataFrame(list_l, index=index, columns=col)
print(df)
"""a   b   c   d     e
2018-07-01   1   3   3   5   4.0
2018-07-02  11   7  15  13   9.1
2018-07-03   4   2   7   9   3.5
2018-07-04  15  11  12   6  11.1
"""dict_demo1 = {key_ind: [] for key_ind in index}
print(dict_demo1)
"""
{'2018-07-02': [], '2018-07-04': [], '2018-07-01': [], '2018-07-03': []}
"""dict_demo2 = {key_ind: {key_col: df.loc[key_ind, key_col] for key_col in col} for key_ind in index}
print(dict_demo2)
"""
{'2018-07-04': {'c': 12.0, 'd': 6.0, 'b': 11.0, 'a': 15.0, 'e': 11.1},
'2018-07-03': {'c': 7.0, 'd': 9.0, 'b': 2.0, 'a': 4.0, 'e': 3.5},
'2018-07-02': {'c': 15.0, 'd': 13.0, 'b': 7.0, 'a': 11.0, 'e': 9.0999999999999996},
'2018-07-01': {'c': 3.0, 'd': 5.0, 'b': 3.0, 'a': 1.0, 'e': 4.0}}
"""

(二)添加一组键值对

  • d[key] = value
  • d.setdefault(self, k, d=None)

demo:

# !/usr/bin/python2.7
# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""keys = ['a', 'b', 'c']
mydict = {key: "value_%s" % key for key in keys}
print(mydict)  # {'a': 'value_a', 'c': 'value_c', 'b': 'value_b'}mydict["d"] = "dddd"
print(mydict)  # {'a': 'value_a', 'c': 'value_c', 'b': 'value_b', 'd': 'dddd'}# d.setdefault 如果键存在,则和get()一样获取对应值,如果键不存在于字典中,将会添加键并将值设为default
print(mydict.setdefault("d", "ddddset"))  # dddd
print(mydict)  # {'a': 'value_a', 'c': 'value_c', 'b': 'value_b', 'd': 'dddd'}
print(mydict.setdefault("e", "eeeeset"))  # eeeeset
print(mydict)  # {'a': 'value_a', 'c': 'value_c', 'b': 'value_b', 'e': 'eeeeset', 'd': 'dddd'}

(三)更新键值对

# !/usr/bin/python2.7
# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""d = {"a": 1, 'b': 2, 'c': {'cc': 3, 'cc2': 4}}
print(d)
# {'a': 1, 'c': {'cc': 3, 'cc2': 4}, 'b': 2}d.update({"cc": 44})
print(d)
# {'a': 1, 'cc': 44, 'c': {'cc': 3, 'cc2': 4}, 'b': 2}d.update({"c": {"cc": 44}})
print(d)
# {'a': 1, 'cc': 44, 'c': {'cc': 44}, 'b': 2}

(四)删除一组键值对、清空字典等

  • 删除一项:

    • del d[key]
    • d.pop(key) 返回pop掉的键值对的值
  • 清空所有条目:d.clear()
  • 删除字典:del d
# !/usr/bin/python2.7
# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""keys = ['a', 'b', 'c']
mydict = {key: "value_%s" % key for key in keys}
print(mydict)  # {'a': 'value_a', 'c': 'value_c', 'b': 'value_b'}del mydict["b"]
print(mydict)  # {'a': 'value_a', 'c': 'value_c'}mydict.clear()
print(mydict)  # {}del mydict
print(mydict)
"""
Traceback (most recent call last):File "/home/zmate/tzzs/mytz/test.py", line 19, in <module>print(mydict)
NameError: name 'mydict' is not defined
"""

(五)查询、取值

(1)获取一个 key 所对应的 value

  • d[key]
  • d.get(key)
  • d.get(key,default) 在当字典中没有相应的key时,返回 default(默认为None),而不是直接报错。
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""keys = ['a', 'b', 'c', 'd', 'e']mydict = {key: "value_%s" % key for key in keys}
print(mydict)
"""
{'a': 'value_a', 'd': 'value_d', 'c': 'value_c', 'e': 'value_e', 'b': 'value_b'}
"""print(mydict.get("a"))  # value_a
print(mydict["a"])  # value_a# print(mydict["aaa"])  # KeyError: 'aaa'
print(mydict.get("aaa"))  # None
print(mydict.get("aaa", {}))  # {}
print(mydict.get("aaa", {}).get("aaa", {}))  # {}

(2)查询 key/value 是否在字典中

  • key是否在字典中:
    key in d
    key in d.keys()
  • values是否在字典中:
    vaule in d.values()
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""keys = ['a', 'b', 'c', 'd', 'e']
mydict = {key: "value_%s" % key for key in keys}
print(mydict)  # {'a': 'value_a', 'd': 'value_d', 'c': 'value_c', 'e': 'value_e', 'b': 'value_b'}# 查询是否在字典的key中
print("a" in mydict)  # True
print("a" in mydict.keys())  # True
print("f" in mydict)  # False
print("value_a" in mydict)  # False
# 查询是否在字典的value中
print("value_a" in mydict.values())  # True

(3)遍历字典

# 遍历所有的key:
for key in d.keys():print(key)# 遍历所有的value:
for value in d.values():print(value)# 遍历所有的键值对:
for item in d.items():print(items)  # 输出的是元组格式
# 或者
for k,v in d.items():print(k,"----",v)
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""keys = ['a', 'b', 'c', 'd', 'e']
mydict = {key: "value_%s" % key for key in keys}
print(mydict)  # {'a': 'value_a', 'd': 'value_d', 'c': 'value_c', 'e': 'value_e', 'b': 'value_b'}for k in mydict.keys():print(k)
"""
b
d
e
a
c
"""for v in mydict.values():print(v)
"""
value_b
value_d
value_e
value_a
value_c
"""for item in mydict.items():print(item)
"""
('b', 'value_b')
('d', 'value_d')
('e', 'value_e')
('a', 'value_a')
('c', 'value_c')
"""for k, v in mydict.items():print(k, "----", v)
"""
b ---- value_b
d ---- value_d
e ---- value_e
a ---- value_a
c ---- value_c
"""

在Python中,检查一个元素是否在 dicitonary 或 set 中存在的效率很高。因为 dict 和 set 使用哈希表来实现。查找效率可以达到 O(1)。如果需要经常检查成员,建议使用 set 或 dict 。

(六)复制 d.copy

d.copy() 返回一个 dict 的浅复制

# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""mydict = {"china": {"shanghai": {"person1": {"age": 20, "data": [77, 87, 99]}},}
}
print(mydict)  # {'china': {'shanghai': {'person1': {'age': 20, 'data': [77, 87, 99]}}}}mycopy = mydict.copy()
mydict["china"] = 111
print(mydict)  # {'china': 111}
print(mycopy)  # {'china': {'shanghai': {'person1': {'age': 20, 'data': [77, 87, 99]}}}}mydict = {"china": {"shanghai": {"person1": {"age": 20, "data": [77, 87, 99]}},}
}
print(mydict)  # {'china': {'shanghai': {'person1': {'age': 20, 'data': [77, 87, 99]}}}}mycopy = mydict.copy()
mydict["china"]["shanghai"] = 111
print(mydict)  # {'china': {'shanghai': 111}}
print(mycopy)  # {'china': {'shanghai': 111}}

如需深层复制 dict,可使用 copy.deepcopy()

# -*- coding:utf-8 -*-"""
@author:    tz_zs
"""import copymydict = {"china": {"shanghai": {"person1": {"age": 20, "data": [77, 87, 99]}},}
}
print(mydict)  # {'china': {'shanghai': {'person1': {'age': 20, 'data': [77, 87, 99]}}}}mycopy = copy.deepcopy(mydict)
mydict["china"] = 111
print(mydict)  # {'china': 111}
print(mycopy)  # {'china': {'shanghai': {'person1': {'age': 20, 'data': [77, 87, 99]}}}}mydict = {"china": {"shanghai": {"person1": {"age": 20, "data": [77, 87, 99]}},}
}
print(mydict)  # {'china': {'shanghai': {'person1': {'age': 20, 'data': [77, 87, 99]}}}}mycopy = copy.deepcopy(mydict)
mydict["china"]["shanghai"] = 111
print(mydict)  # {'china': {'shanghai': 111}}
print(mycopy)  # {'china': {'shanghai': {'person1': {'age': 20, 'data': [77, 87, 99]}}}}

(七)比较两个字典 cmp(x, y)

内置函数 cmp(x, y)
比较 x,y 两个参数,x < y 时返回值为 -1,x > y 时返回值为 1,x == y 时返回值为 0。

d1 = {"a": 2, "b": 4}
d2 = {"a": 2, "b": 5}
d3 = {"a": 2, "b": 3}print(cmp(d1, d1))  # 0
print(cmp(d1, d2))  # -1
print(cmp(d1, d3))  # 1

(八)参考:

https://docs.python.org/3/library/stdtypes.html#mapping-types-dict

Python 之 字典(dict)的创建、字典生成式、复制添加更新删除、查询遍历比较等相关推荐

  1. python输入文字、成为字典_Python实现创建字典

    编写一个名为 make_album() 的函数,它创建一个描述音乐专辑的字典. 1.这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典.使用这个函 数创建三个表示不同专辑的字典,并打印每 ...

  2. python做词典_Python实现创建字典

    Python编写一个名为 make_album() 的函数,它创建一个描述音乐专辑的字典. 1.这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典.使用这个函数创建三个表示不同专辑的字典 ...

  3. python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】

    本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...

  4. python编程技术解决英语单词测试(包括添加英文单词、查询英文单词和查询英文单词)以及绘制雷达图功能

    用如Tkinter或wxPython等GUI开发库开发程序用户界面,通过同用户界面交互,程序至少完成以下基本功能: 1.添加英文单词:能对单词添加多重中文释义,不同释义用逗号分开, 单词保存在txt文 ...

  5. c语言 增加 删除 修改的功能 不用链表,C语言的链表的创建、修改、添加与删除...

    /*有点菜学完C之后自己写的*/ //欢迎评论缺点QQ3027887754 备注C #include#include#include typedef struct nnn { int num; str ...

  6. python建立字典的程序_Python中如何创建字典Dict

    1.概述 字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据,而且是Python中唯一的内建映射型数据结构. 比如有一个小学生的期末成绩,语文:79,数学:80,英语:92 ...

  7. python dict遍历_Python 容器(二):字典(Dict)

    Python 容器(二):字典(Dict) 一.字典 1.定义:Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有 ...

  8. Python全栈之路:字典dict常用方法

    特性: dict无序 key唯一,天生去重 常用函数 dict.clear() 删除字典中所有元素 dict.copy() 返回字典(浅复制)的一个副本 dict.get(key,default=No ...

  9. [Python]字典dict简介

    文章目录 字典dict 字典操作 字典遍历 遍历key 遍历value 同时遍历key与value 操作函数 内置函数 内置方法 字典是一种可变容器,可存储任意类型的键值对. 字典dict pytho ...

  10. python基础-变量,变量类型,字符串str,元组tuple,列表list,字典dict操作详解(超详细)

    python基础--变量 (文章较长,若需要单独看某一个点,可点击目录直接跳转) 文章目录 python基础--变量 1. 变量 2. 变量类型 2.1数字类型 2.2 字符串 2.3 列表 2.4 ...

最新文章

  1. JavaScript基础教程(三)
  2. photoshop8.0 安装步骤及注意事项
  3. 数据中台推荐系统入门(二):两种经典的推荐算法
  4. POJ 3061 (二分+前缀和or尺取法)
  5. 解决ajax方法内部不能给外部变量赋值的问题
  6. mysql function select 赋值_MySql 进阶
  7. html中单选多选怎么写,HTML中select标签单选多选用法详解
  8. SAP Cloud Application Programming 编程模型(CAP)的设计准则
  9. 分而治之_播放框架模块:分而治之
  10. 如何在Linux中找到您的IP地址
  11. hibernate多对多映射关系实现
  12. 自定义分区partitioner实现数据分区存储
  13. 抗锯齿_《战地V》深度学习抗锯齿性能测试:对它最友好的竟然是4K
  14. WIN10系统安装金蝶K3 WISE14.0以下客户端版本
  15. 通信技术计算机技术合称为,通信技术、计算机技术和控制 技术合称为3C
  16. 2022年数维杯数学建模C题 电动汽车充电站的部署优化策略求解全过程文档及程序
  17. Spark任务调度概述_大数据培训
  18. 如何有效开展小组教学_小学语文教学中如何有效开展小组合作学习
  19. 机器学习笔记——kd树及python实现
  20. did模型(did模型适用范围)

热门文章

  1. git下载出错GnuTLS recv error (-54): Error in the pull function
  2. matlab fread函数详解
  3. WPS vba宏插件安装包
  4. 特征数据清洗 编码 标准化
  5. AHP层次分析法具体操作
  6. 《信号与系统》(吴京)部分课后习题答案与解析——第一章
  7. vue-cli+uni-app+vue3.0+ts构建自定义条件编译(飞书)小程序
  8. 【MyBatis】MyBatis找不到mapper文件
  9. 流水灯c语言代码大全,单片机闪烁灯流水灯汇编代码大全
  10. 【AD封装】DB9接口公母头(带3D)