主页

索引

模块索引

搜索页面

2.1.4. 字典dict/map{}

备注

为一种没有顺序的的容器,其使用的是大括弧{},里面包含键值与值(key : value)

备注

序列是以连续的整数为索引,与此不同的是,字典以”关键字”为索引,关键字可以是任意不可变类型,通常用字符串或数值。字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。

关键点:

字典 定义语法为 {元素1, 元素2, ..., 元素n}

大括号 -- 把所有元素绑在一起
逗号 -- 将每个键值对分开
冒号 -- 将键和值分开

字典 是无序的 键:值(key:value)对集合,键必须是互不相同的

实例:

ab = {
   'key1' : 'value1',
   'key2' : 'value2',
   'key3' : 'value3',
   'key4' : 'value4'
 }
 print("key1's value is %s" % ab['key1'])

 # 1. 增加
 ab['key5'] = 'value5'

 # 2. 删除一条记录
 del ab['key3']

 # 3. 查询
 ab['key1']            => 'value1'
 ab['key_not_exist']   => 报错: KeyError

 # 4. 查询(默认值)
 ab.get('key1', 'abc')    => 'value1'
 ab.get('key_not_exist', 'abc')    => 'abc'  # 查不到使用默认值

 # 6. 打印字典组中全部数据
 for key, value in ab.items():
     print ('key %s 的 value is %s' % (key, value))

 if 'key1' in ab:   # 或 ab.has_key('key1')
     print ("\nkey1的 value is %s" % ab['key1'])

实例:

1. 初使化
dic = { 'a':'v','b':'w', }  #最后一个逗号可以省略
dic_ = { 'd':'y','c':'x' }
print(dic, dic_)

2. 数组(tuple)转化为dict
方法1:
lol1 = [ ['a', 'b'], ['c', 'd'], ['e', 'f'] ]
lol2 = [ ('a', 'b'), ('c', 'd'), ('e', 'f') ]
lol3 = ( ['a', 'b'], ['c', 'd'], ['e', 'f'] )
print(dict(lol1), dict(lol2), dict(lol3))

方法2:
tos1 = [ 'ab', 'cd', 'ef' ]
tos2 = ( 'ab', 'cd', 'ef' )
print(dict(tos1), dict(tos2))
# {'a': 'b', 'c': 'd', 'e': 'f'} {'a': 'b', 'c': 'd', 'e': 'f'}

3. 替换
3.1 dict元素替换
print(dic_['c'])
dic_['c'] = 'z'
print(dic_['c'])

3.2 dict替换
dic.update(dic_)
print(dic)

4. 删除
del dic['d']
print(dic)

5. 元素是否存在
print('a' in dic)

6. dict转化为数组(tuple)
print(dic.keys())         # dict_keys(['a', 'b', 'c'])
print(dic.values())       # dict_values(['v', 'w', 'x'])
print(list(dic.items()))  # [('a', 'v'), ('b', 'w'), ('c', 'x')]

7. 值传递vs引用传递
7.1. 引用传递(直接赋值)
dic_new = dic
dic_new['a'] = 'n'
print(dic, dic_new)

7.2. 值传递(浅复制)
dic_cp = dic.copy()
dic_cp['a'] = 'm'
print(dic, dic_cp)

内置方法

dict.fromkeys(seq[, value]):

用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。

seq = ('name', 'age', 'sex')
dic1 = dict.fromkeys(seq)
print(dic1)
# {'name': None, 'age': None, 'sex': None}

dic2 = dict.fromkeys(seq, 10)
print(dic2)
# {'name': 10, 'age': 10, 'sex': 10}

dic3 = dict.fromkeys(seq, ('小马', '8', '男'))
print(dic3)
# {'name': ('小马', '8', '男'), 'age': ('小马', '8', '男'), 'sex': ('小马', '8', '男')}

dict.keys():

返回一个可迭代对象,可以使用 list() 来转换为列表,列表为字典中的所有键

dic = {'Name': 'lsgogroup', 'Age': 7}
print(dic.keys())  # dict_keys(['Name', 'Age'])
lst = list(dic.keys())  # 转换为列表
print(lst)  # ['Name', 'Age']

dict.values():

返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。

dic = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'}
print(dic.values())
# dict_values(['female', 7, 'Zara'])

print(list(dic.values()))
# [7, 'female', 'Zara']

dict.items():

以列表返回可遍历的 (键, 值) 元组数组。

dic = {'Name': 'Lsgogroup', 'Age': 7}
print(dic.items())
# dict_items([('Name', 'Lsgogroup'), ('Age', 7)])

print(tuple(dic.items()))
# (('Name', 'Lsgogroup'), ('Age', 7))

print(list(dic.items()))
# [('Name', 'Lsgogroup'), ('Age', 7)]

dict.get(key, default=None):

返回指定键的值,如果值不在字典中返回默认值。

dic = {'Name': 'Lsgogroup', 'Age': 27}
print("Age 值为 : %s" % dic.get('Age'))  # Age 值为 : 27
print("Sex 值为 : %s" % dic.get('Sex', "NA"))  # Sex 值为 : NA
print(dic)  # {'Name': 'Lsgogroup', 'Age': 27}

dict.setdefault(key, default=None):

和get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。

dic = {'Name': 'Lsgogroup', 'Age': 7}
print("Age 键的值为 : %s" % dic.setdefault('Age', None))  # Age 键的值为 : 7
print("Sex 键的值为 : %s" % dic.setdefault('Sex', None))  # Sex 键的值为 : None
print(dic)
# {'Age': 7, 'Name': 'Lsgogroup', 'Sex': None}

dict.pop(key[,default]):

删除字典给定键 key 所对应的值,返回值为被删除的值。
key 值必须给出。
若key不存在,则返回 default 值。

dic1 = {1: "a", 2: [1, 2]}
print(dic1.pop(1), dic1)  # a {2: [1, 2]}

# 设置默认值,必须添加,否则报错
print(dic1.pop(3, "nokey"), dic1)  # nokey {2: [1, 2]}

dict.popitem():

随机返回并删除字典中的一对键和值,如果字典已经为空,却调用了此方法,就报出KeyError异常。

dic1 = {1: "a", 2: [1, 2]}
print(dic1.popitem())  # {2: [1, 2]}
print(dic1)  # (1, 'a')

dict.clear():

用于删除字典内所有元素。

dic = {'Name': 'Zara', 'Age': 7}
print("字典长度 : %d" % len(dic))  # 字典长度 : 2
dic.clear()
print("字典删除后长度 : %d" % len(dic))
# 字典删除后长度 : 0

主页

索引

模块索引

搜索页面