Python_字典及其操作

字典

概念

    字典,Python基础数据类型之一,{}以键值对的形式存储数据。

    以key : value 形式存储数据。例如,name 为 key,Laonanhai 为 value。

dic = {
'name': 'Laonanhai', 'age': 45, 'name_list': ['反面教材', '俊俊', ...] }

    Python中唯一的映射类型。用以存储大量的关系型数据。

数据类型的分类

可变类

    可变(不可哈希hash):list、dict、set。例如 list = [11, 222, 333]

    不可变(可哈希hash):str、int、tuple、bool。例如 name = 'alex'

容器类

    容器类的数据类型:list、dict、tuple。例如 l1 = [11, True, 'alex', [22, 33, 44]]

    非容器类的数据类型:int、str、bool。例如 s1 = '[11, 22, 33]'

    字典的key必须是不可变的数据类型,是唯一的。

hash算法

    字典的键key通过hash表转换为数字,采用二分查找查询数字。

    字典的value可以使任意的数据类型。

    字典的查询速度非常快,可以存储大量的关系型数据。

    字典在Python 3.5 包含3.5之前都是无序的,但在3.6之后是有序的。

键唯一

    当存在一样的键时后面的覆盖前边的。例如:

dic = {
  'name': 'alex',
  'name': 'WuSir'
}
print(dic)

    键必须是不可变的(可哈希的)数据类型。当键为可变的(不可哈希的)数据类型时,输出提示错误。例如:

dic = {
  'name': 'alex',
  [1, 2, 3]: 'value'
}
print(dic)

在循环字典时,最好不要改变字典的大小,会影响结果或者报错。

    错误示例:

dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'}
for i in dic:
    if 'k' in i:
        del dic[i]
print(dic)

dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'}
l1 = []
for key in dic:
    if 'k' in key:
        l1.append(key)
    print(l1)
for key in l1:
    del dic[key]
print(dic)

操作

dic['A'] = B

    A为键,B为值。直接增加,有则覆盖,无则添加。

    无则添加

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
dic['sex'] = 'Laddy_boy'
print(dic)

 

  有则覆盖

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
dic['name'] = 'alex'
print(dic)

 

dic.setdefault('A', 'B') 

    A为键,B为值。有则不变,无则添加。

    无则添加

    当只添加A时,对应的B值默认为None。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
dic.setdefault('sex')
print(dic)

 

    当A、B都有值时,A为key,B为value。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
dic.setdefault('sex','Laddyboy')
print(dic)

 

    有则不变

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
dic.setdefault('name', 'alex')
print(dic)

 

dict.fromkeys(A, B)

    A为可迭代对象,B任意。创建一个字典,迭代A的最小元素为键,B为值。

dic = dict.fromkeys('abc', 666)
print(dic)

dic = dict.fromkeys([11, 22, 33], 666)
print(dic)

dic = dict.fromkeys([1, 2, 3], [])
dic[1].append(666)
print(dic)

dic.pop('A')

    有返回值,返回的是键对应的值。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
print(dic.pop(‘age’))
print(dic)

 

    当没有此键时,可修改默认返回值。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
print(dic.pop('age1', '没有此键...'))
print(dic)

 

dic.clear()

    清空字典。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
dic.clear()
print(dic)

 

dic.popitem()

    随机删除,有返回值,返回值为元组,里面是删除的键值对。

    在Python 3.5(包含3.5)之前是无序删除,Python 3.6 以后是删除字典最后一位。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
print(dic.popitem())
print(dic)

 

del

del dic

    删除整个字典。内存级别删除。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
del dic
print(dic)

 

del dic['A']

    按照键A删除对应的键值对。

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
del dic['name']
print(dic)

 

dic['A'] = 'B'

    有则覆盖,没有则添加。 

dic = {'name': '老男孩', 'age': 56, 'hobby': 'women'}
dic['name'] = 'Alex'
print(dic)

 

A.update(B)

    A、B分别为两个字典。两个字典的更新。

    将B字典的内容覆盖添加到A里面,B不变。

dic = {"name": "jin", "age": 18, "sex": "male"}
dic2 = {"name": "alex", "weight": 75}
dic2.update(dic)
print(dic)
print(dic2)

 

 查

dic[A]

    A为键。

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic['name'])

 

    当字典中没有查找的键是,打印报错。

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic['name1'])

 

dic.get(A)

    A为键。

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic.get('name'))

 

    当查找的键字典里没有时,默认打印输出None。例如:

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic.get('name1'))

 

    当查找的键字典里面没有时,可将默认输出修改为自己需要的内容。例如:

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic.get('name1','SB,没有此键'))

 

for循环

    输出键

dic = {"name": "jin", "age": 18, "sex": "male"}
for i in dic:
    print(i)

 

dic.keys()

    打印输出的内容为键,打印输出的格式为 dict_keys

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic.keys(), type(dic.keys()))

 

dic.values()

    打印输出的内容为值,打印输出的格式为dict_values。

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic.values(), type(dic.values()))

 

dic.items()

    打印输出的内容为键值对,放在元组内。打印输出的格式为dict_items

dic = {"name": "jin", "age": 18, "sex": "male"}
print(dic.items(), type(dic.items()))

 

for循环

打印key

    将键循环打印出来。

dic = {"name": "jin", "age": 18, "sex": "male"}
for key in dic.keys():
    print(key)

 

打印value
dic = {"name": "jin", "age": 18, "sex": "male"}
for i in dic.values():
print(i)

键转换成列表

dic = {"name": "jin", "age": 18, "sex": "male"}
l_key = list(dic.keys())
print(l_key)

 

值转换成列表

dic = {"name": "jin", "age": 18, "sex": "male"}
l_values = list(dic.values())
print(l_values)

 

字典的嵌套

    原始字典dic

dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}

添加键值对

    学校:老男孩

dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}
dic['学校'] = '老男孩'
print(dic)

 

 嵌套字典的修改

    将status对应的值改为True。

dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}
dic['status'] = True
print(dic)

 

 嵌套字典元素追加

    给name_list追加一个元素‘平平’。

dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}
dic['name_list'].append('平平')
print(dic)

 

 嵌套字典添加键值对

    给personal_msg对应的字典添加一个键值对sex:男。

dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}
dic['personal_msg']['sex'] = '男'
print(dic)

 

 嵌套字典修改

    将hobby_list对应的列表中的烫头改成唱歌。

dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}
dic['personal_msg']['hobby_list'][-1] = '唱歌'
print(dic)

 

 

posted @ 2018-09-04 19:18  AKA绒滑服贵  阅读(195)  评论(0编辑  收藏  举报