版权声明:本文为博主原创文章,欢迎讨论共同进步。 https://blog.csdn.net/tz_zs/article/details/82853665
____tz_zs
字典(dict)
字典类型(dict)是“键–值”数据项的组合,每个元素是一个键值对。如:身份证号(键)–个人信息(值)。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
字典类型的数据是无序的,字典类型数据通过映射查找数据项。
构建字典
创建字典的两种方法:{} 和 dict()
dict1 = {'a': 1, 'b': 2}
dict2 = dict(a=1, b=2)
print dict1
print dict2
'''
{'a': 1, 'b': 2}
{'a': 1, 'b': 2}
'''
例子 使用 df 构建字典
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
@author: tz_zs
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
list_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'}
删除:
- 删除一项:
- 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
"""
查询
获取一项:
d[key]
# 或者
d.get(key)
- d.get(key,default) 在当字典中没有相应的key时,返回 default(默认为None),而不是直接报错。
见以下demo
#!/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", {})) # {}
查询key/value是否在字典中
# key是否在字典中:
key in d
# values是否在字典中:
vaule in d.values()
demo
#!/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("f" in mydict) # False
print("value_a" in mydict) # False
# 查询是否在字典的value中
print("value_a" in mydict.values()) # True
遍历字典
# 遍历所有的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)
demo
#!/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()
返回一个字典的浅复制
# !/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'}
mycopy = mydict.copy()
mydict["a"] = "111"
print(mydict) # {'b': 'value_b', 'c': 'value_c', 'a': '111'}
print(mycopy) # {'b': 'value_b', 'c': 'value_c', 'a': 'value_a'}