Python 之字典(dict)

版权声明:本文为博主原创文章,欢迎讨论共同进步。 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'}

猜你喜欢

转载自blog.csdn.net/tz_zs/article/details/82853665
今日推荐