• 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)
    

     

  • 相关阅读:
    ESP8266 RTOS SDK烧写环境构建
    杂记:解决Android扫描BLE设备名称不刷新问题
    deviceMotion.userAcceleration加速度方向
    二、多功能提示框——MBProgressHUD
    一、初识CocoaPods——XCode的依赖库管理工具
    摄像机的控制
    DOTween 使用方法
    Unity依赖注入使用详解
    Unity中对SQL数据库的操作
    unity导弹算法 预计目标点
  • 原文地址:https://www.cnblogs.com/ZN-225/p/9587957.html
Copyright © 2020-2023  润新知