Python全栈__字典及其操作

Posted 芒果不盲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

 分别赋值

a, b = 1, 2
print(a, b)

 

 

a, b = (\'alex\', \'34\')
print(a, b)

 

 

a, b = [\'alex\', \'34\']
print(a,b)

 

  有如下:

    a = 1

    b = 3

  用一行代码实现a b值互换。

a = 1
b = 3
a, b = b, a
print(a, b)

 

 

for i in [22, 33, 44]:
        print(i)

 

 

for i in [(11, 22), (33, 44), (55, 66)]:
        print(i)

 

 

k, v = (\'name\', \'老男孩\')
print(k, v)

 

 

dic = {"name": "jin", "age": 18, "sex": "male"}
for k, v in dic.items():
        print(k, v)

 

 

字典的嵌套

  原始字典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)

 

 

以上是关于Python全栈__字典及其操作的主要内容,如果未能解决你的问题,请参考以下文章

python全栈之路:vars():__name__,__file__,__package__,__doc__ vars()

Python全栈开发课堂笔记_day03

Python全栈_Day11_grep和正则表达式

Python入门学习六 字典及其相关操作

Python全栈day28(上下文管理)

Python全栈__字符串初识及操作