十一、字典

一、定义

定义空字典:

1
members = {}
  • 字典对象定义用 花括号{} ,字典里的每个元素之间用 逗号 隔开;

  • 每个元素都是一个 键值对 ,键和值之间用 冒号 : 隔开;

    1
    2
    3
    4
    members = {
    'account1' : 13 ,
    'account2' : 12
    }

    ::: warning

    1.字典的 必须是可以进行 哈希值计算 的对象,通常是 数字 或者 字符串

    2.字典的 可以是 任何类型 的对象, 包括 数字、 字符串、 列表、字典、自定义类型 等等。

    :::

    1
    2
    3
    4
    members = {
    'account1' : {'account':'account1', 'level': 13, 'point':3000} ,
    'account2' : {'account':'account2', 'level': 12, 'point':36000}
    }
  • 字典对象: 根据 去查找 非常的方便高效

    1
    2
    3
    4
    5
    members = {
    'account1' : 13 ,
    'account2' : 12
    }
    print(members['account1']) # 13
  • 字典对象的 键是唯一的 ,如果出现两个相同的键,后面的元素会替换前面的元素

    1
    2
    3
    4
    5
    members = {
    'account1' : 13 ,
    'account1' : 12
    }
    print(members) # {'account1': 12}
  • 如果查找的 键 在字典中不存在,则会报错

    1
    2
    3
    4
    5
    members = {
    'account1' : 13 ,
    'account2' : 12
    }
    print(members['account99']) # KeyError: 'account99'

二、 添加、 修改、 删除

1
var[key] = something

括号里面的key:

  • 如果在字典中 不存在,就是 添加元素 的的操作,
  • 如果已经 存在 ,就是 重新赋值 操作。 因为字典不允许有相同的key

1. 添加

1
2
3
4
members = {}

members['account1'] = 13
members['account2'] = 12

结果:

1
2
3
4
{
'account1' : 13 ,
'account2' : 12
}

2. 修改

1
2
3
4
5
6
{
'account1' : 13 ,
'account2' : 12
}

members['account2'] = 88

结果为:

1
2
3
4
{
'account1' : 13 ,
'account2' : 88
}

3. 删除

  • pop :可以返回删除 key 对应的 value 对象

    1
    2
    3
    4
    5
    6
    7
    8
    members = {
    'account1' : 13 ,
    'account2' : 12
    }

    val = members.pop('account1')
    print(members)
    print(val) # 13
  • del

    1
    2
    3
    4
    5
    6
    members = {
    'account1' : 13 ,
    'account2' : 12
    }

    del members['account1']

三、判断字典是否存在某个 key

  • a in var # 检查 a 是否在var 中存在,存在返回True,否则返回False

  • a not in var # 检查 a 是否不在var 中,存在返回 False,否则返回 True

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    members = {
    'account1' : 13 ,
    'account2' : 12
    }

    if 'account1' in members:
    print('account1 在字典中存在') # True

    if 'account88' not in members:
    print('account88 不在字典中') # True

四、访问字典的所有元素

items() 方法:可以返回一个列表对象,每个元素就是键值组成的元组。

1
[('account1', 13), ('account2', 12), ('account3', 15)]

访问所有元素:

1
2
3
4
5
6
7
8
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}

for account, level in members.items():
print (f'account:{account}, level:{level}')

得到所有的 key 和 value 对象

1. keys() 方法

1
2
3
4
5
6
7
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}

members.keys() # ['account1', 'account2', 'account3']

2. values() 方法

1
2
3
4
5
6
7
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}

members.values() # [13, 12, 15]

六、 清空字典

1. clear() 方法

1
2
3
4
5
6
7
8
9
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}

members.clear()

print(members)

2. 重新赋值

1
2
3
4
5
6
7
8
9
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}

members = {}

print(members)

::: warning

  1. clear 方法指向的是 原字典
  2. 重新赋值 指向的是 新字典

:::

七、字典合并

update() 方法:可以合并两个字典得到一个新的字典

当有相同的键时,主字典中的 会被替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}

another = {
'account4' : 13 ,
'account3' : 12 ,
}

members.update(another)

print(members) # {'account1': 13, 'account2': 12, 'account3': 12, 'account4': 13}

八、 得到字典元素的个数

len() 方法

1
2
3
4
5
6
7
8
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}


print(len(members)) # 3

九、字典 与 json 之间转换

1、 字段 转换为 json(dumps()方法)

1
2
3
4
import json

data1 = {"aac003": "tom", "tel": "13959687639", }
print(json.dumps(data1))

2. json 转换为 字典(loads()方法)

1
2
3
4
import json

data1 = '{"aac003": "tom", "tel": "13959687639"}'
print(json.loads(data1))

3. 关于json中文编码

json.dumps 序列化时对中文默认使用的ascii编码

想输出真正的中文需要指定ensure_ascii=False

indent=4 : 表示缩进

1
2
3
4
5
6
>>> import json
>>> print json.dumps('中国')
"\u4e2d\u56fd"
>>> print json.dumps('中国',ensure_ascii=False)
"中国"
>>>