• Python学习---Python下[字典]的学习


    Python中唯一的映射类型(哈希表)       -->Java中的HashMap<K,V>

    Python对key进行了哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序的

    字典的对象是可变,但是字典的键值必须使用不可变对象,并且一个字典中可以使用不同类型的键值

    创建字典:key的设置必须是不可变的类型,可以整数,可以是变量,元组,也可以使单字符'a'【类似Java中的key的唯一性】

    字典特点: 无序, 键值唯一[如遇冲突后面会覆盖前面]

    字典的创建

              1. 直接创建 hash = {'[1,2,3]': 'hello world'},要求key是不可变的

              2. 利用dict类创建: dict(name='hhh',age=12)

              3. 利用dict.fromkeys: dict.fromkeys(['test1', 'test2', 'test3'], 'hhh')

    直接创建

    # '[1,2,3]',将一个元组做为一个字符串传入进去,所以执行成功
    hash = {'[1,2,3]': 'hello world'}
    print(hash)
    # 必须是不可变类型,这里的[1,2,3]是可变类型,不能被hash计算
    unhash = {[1,2,3]: 'hello world'}
    print(unhash)

    image

    根据dict类创建字典:

    # 注意键值不需要带引号
    dic = dict(name='ftl', age=12, sex='male')       # 推荐使用,py官方写法,不需要引号哈
    print(dic) 
    dd = dict((('name', 'ftl'), ('age', 13), ('sex', 'male')))
    print(dd)

    image

    dict.fromkeys创建字典(有问题)

    name = dict.fromkeys(['test1', 'test2', 'test3'], 'hhh')
    print("name             ", name)
    name['test1'] = 'ftl'
    print("name修改test1属性", name)
    
    #有问题,可以查询深浅拷贝
    name2 = dict.fromkeys(['test1', 'test2', 'test3'], ['hello', 'world'])
    print("name2             ", name2)
    name2['test1'][1] = 'Python'
    print("name2修改test1属性", name2)

    image

    字典的查询

    keys, values, items, person['age'], person['school']['name']

    print('-------------------------------------------------------------------------')
    person = {"name": "hhh", "age": 36, "school": {'name': 'xupt', 'headmaster': 'hhh2017'}}
    # 打印所有字典信息:
    print("打印所有字典信息:", person)
    # 根据键值取对象
    print("根据键值取对象:", person['age'])
    # 取出学校的信息&&单独取出校长名称
    print("学校信息:", person['school'])
    print("学校信息(校长名字):", person['school']['headmaster'])
    print('-------------------------------------------------------------------------')
    # 打印所有的keys,返回一个dict_keys类型
    print("打印所有的keys,返回dict_keys类型:", person.keys())
    # 打印所有的keys,转换dict_keys类型为list
    print("打印所有的keys,转换dict_keys类型为list:", list(person.keys()))
    # 打印嵌套的字典的keys
    print("打印嵌套的字典的keys:", person['school'].keys())
    print('-------------------------------------------------------------------------')
    # 打印所有的values,返回一个dict_keys类型
    print("打印所有的values,返回dict_values类型:", person.values())
    # 打印所有的values,转换dict_keys类型为list
    print("打印所有的values,转换dict_values类型为list:", list(person.values()))
    # 打印嵌套的字典的values
    print("打印嵌套的字典的values:", person['school'].values())
    print('-------------------------------------------------------------------------')
    # 打印键值对,作为一个元组存储
    print("打印键值对:", person.items())
    # 打印嵌套的字典的键值对
    print("打印嵌套的字典的键值对:", person['school'].items())
    print('-------------------------------------------------------------------------')
    # 如果遇到键值key冲突,则后面的会覆盖前面的key值
    name = {'age': 'hello', 'age': '12'}
    print("键值冲突后面会覆盖前面的内容:", name)
    print('-------------------------------------------------------------------------')
    

    image

    字典的查询

    字典利用get读取内容:

    dic = {'name':'ftl', 'age':23, 'sex': 'male'}
    print(dic['name'])
    print(dic.get('name'))
    print(dic.get('school'))  # 找不出来后打印None
    print(dic.get('school','peking'))  # 找不出来后打印后面的默认值 peking
    字典的判断: in 用来判断键key是否在字典中
    name = {'h':'hello', 'w':'world'}
    print('h' in name)
    print('hello' in name)

    字典的增加

            1. 赋值添加

            2. setdefault: 没有就添加,有就不改动,返回相应的键值

    info = {'name': 'ftl'}
    print("添加信息之前:", info)
    # 直接赋值添加
    info['age'] = 13
    print("添加信息之后:", info)
    
    # setdefault有就不操作,没有就添加,并且返回一个值
    real = info.setdefault('school', 'xupt')
    print("setdefault添加信息之后(添加信息):", info)
    print("setdefault返回的值:", real)
    real2 = info.setdefault('age', 100)
    print("setdefault添加信息之后(修改信息):", info)
    print("setdefault返回的值:", real2)

    image

    字典的修改

           1.  取值后重新赋值

           2.  update方法

    取值后重新赋值

    print('-------------------------------------------------------------------------')
    person = {"name": "hhh", "age": 36, "school": {'name': 'xupt', 'headmaster': 'hhh2017'}}
    # 打印所有字典信息:
    print("打印所有字典信息(旧的):", person)
    # 根据键值修改对象
    person['age'] = 100
    print("根据键值修改person的:", person['age'])
    # 修改取出校长名称
    person['school']['headmaster'] = 'python'
    print("学校信息(新校长名字):", person['school']['headmaster'])
    print('-------------------------------------------------------------------------')
    

    image

    Update方法修改属性:有则修改,没有则添加

    person = {"name": "hhh", "age": 36, "school": 'xupt'}
    person2 = {'name': 'ftl', 'age': 100, 'school': 'qinghua', 'sex': 'male'}
    print("Pserson(old):", person)
    print("Pserson2(old):", person2)
    person.update(person2)
    print("Pserson(new):", person)
    print("Pserson2(new):", person2)

    image

    字典的删除

         del :    del person['age']      del person

         clear:   person.clear()

         pop:    person.pop('age')  删除并返回删除对象的value值

         popitem:  默认随机删除一个key-value,并返回一个元组

    person = {"name": "hhh", "age": 36, "school": 'xupt', 'sex': 'male', 'hello': 'world'}
    print("执行了del person['age']前:", person)
    del person['age']
    # del person   删除了person对象
    print("执行了del person['age']后:", person)
    real = person.pop('sex')
    print("person.pop('sex')后", person)
    print("person.pop('sex')的返回值", real)
    # popitem 随记删除一个,并返回一个元组
    ret = person.popitem()
    print("person.popitem()后", person)
    print("person.popitem()的返回值", ret)
    # 清空person对象
    person.clear()
    print("执行了clear()以后:", person)

    image

    字典的其他操作

    字典的嵌套: 字典用key,列表用索引

    china = {
        "中国": {
            "北京": ["首都", "直辖市"],
            "陕西": ["西安", "13朝古都"],
            "山东": ["济南", "趵突泉"],
            "湖南": ["长沙", "米粉"]
        },
        "英国": {"伦敦": ["成龙", "英伦对决"]},
        "美国": {"华盛顿": ['好莱坞', '美国队长']}
    }
    print(china)
    # 更改北京的信息
    china["中国"]["北京"][1] = '长城'
    print(china)

    image

    字典的排序:sort()  ASCII排序/数字大小排序

    ic = {5: '555', 2: '990', 4: '444'}
    # 按照 键 排序
    print(sorted(dic))
    # 按照 内容 排序
    print(sorted(dic.values()))

    image

    字典的遍历:

    dic = {5: '555', 2: '990', 4: '444'}
    # 默认只打印键值
    for i in dic:
        print(i, end="	")
    # 打印key ,value
    print("
    ----------------------------------------------------------")
    # 推荐这种根据键值去查找values,根据下标去查找,效率更高
    for i in dic:
        print(i, dic[i])
    print("----------------------------------------------------------")
    # 转换为items的时候会消耗时间
    for k, v in dic.items():
        print(k, v)
    print("----------------------------------------------------------")
    # 默认打印出来的是一个元组,例如 (2:222)
    for i in dic.items():
        print(i)

    image

    字典转换字符串:str()方法

    name = {'name': 'ftl', 'age': 12, 'sex': 'male'}
    print(str(name))

    image

    字符串转换为字典: eval

    name = {'name': 'ftl', 'age': 12, 'sex': 'male'}
    # 字典转换字符
    ss = str(name)
    # 字符串转换为原来的类型
    ss2 = eval(ss)
    print(type(ss2))
  • 相关阅读:
    gitlab 建仓的流程
    gitlab安装
    以普通用户登录 su root 用vncviewer:xxxxx 会报错!!exit 回到最初环境变的用户 问题解决!!!!
    linux下绘图工具dia
    rds材资收集
    export 解决环境变量的问题!!!!
    查看nginx版本号
    grep -C n "匹配字符串" 匹配字符串上下N行
    查看TOMCAT的版本
    导出数据库的结构不含数据
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9381959.html
Copyright © 2020-2023  润新知