• python基本数据类型之字典


    python基本数据类型之字典

    python中的字典是以键(key)值(value)对的形式储存数据,基本形式如下:

    d = {'Bart': 95, 'Michael': 34, 'Lisa': 56}
    

    整个字典用大括号表示,键值之间使用':'来连接。
    字典的内置方法有:clear、copy、fromkeys、get、items、keys、pop、popitem、setdefault、update、values。

    遍历方法

    字典是可以用for循环进行遍历的。但是默认遍历的是key。

    d = {
        'name':'alex',
        'age':18,
        'gender':'male',
        'married':True
    }
    
    for i in d:
        print(i)
    

    打印结果:

    name
    age
    gender
    married
    

    for循环在遍历时其实是在调用字典的keys()方法,该方法可以返回字典的key值。如果想遍历字典的values, 可以显式地调用values()方法:

    for i in d.values():
        print(i)
    

    打印结果:

    alex
    18
    male
    True
    

    也可以使用items(),该方法是将键和值同时取出来。

    for i in d.items():
        print(i)
    

    打印结果:

    ('name', 'alex')
    ('age', 18)
    ('gender', 'male')
    ('married', True)
    

    可以看到,每个键值对都形成一个元组。

    设置与获取字典的键值

    1、get方法
    get方法可以根据传入的key值来获取对应的value。如果传入的key值不存在,则会返回None。

    v = d.get('name')
    print(v)
    v1 = d.get('home')
    print(v1)
    

    打印结果:

    alex
    None
    

    2、setdefault方法
    同样,setdefault方法与get方法的用法基本一致,但是setdefault可以接收两个参数。

    • key 用来指定key值
    • default 用来为key值指定默认的value
      setdefault方法中传入的key如果存在,该方法就会返回对应的value值;如果key不存在,就会以key-default作为新的键值对存入字典。
    v = d.setdefault('name', 'haha')
    print(v)
    
    v1 = d.setdefault('home', 'hogwarts')
    print(v1)
    print(d)
    

    打印结果:

    alex
    hogwarts
    {'name': 'alex', 'age': 18, 'gender': 'male', 'married': True, 'home': 'hogwarts'}
    

    可以看到,字典d中并没有'home'所对应的值,因此setdefault方法新建了一个键值对。default参数是个可选参数,setdefault方法可以仅传入一个key参数,字典中会增加一个key值,其对应的value为None。

    v2 = d.setdefault('ID')
    print(d)
    

    打印结果:

    {'name': 'alex', 'age': 18, 'gender': 'male', 'married': True, 'home': 'hogwarts', 'ID': None}
    

    创建字典的方法

    1、fromkeys方法
    fromkeys方法可以接收序列类型,以序列中的元素作为键值对创建字典。该方法是静态方法(@staticmethod),也就是说它可以用类名直接调用。

    d1 = dict.fromkeys([1, 2, 3, 4])
    print(d1)
    

    打印结果:

    {1: None, 2: None, 3: None, 4: None}
    

    当仅传入一个序列对象时,fromkeys方法会将该序列中的元素作为key,生成一个新的字典,而每个value为默认的None。
    该方法还可以传入一个默认值,作为每个key的默认value。

    d2 = dict.fromkeys([1, 2, 3, 4], 'haha')
    print(d2)
    

    打印结果:{1: 'haha', 2: 'haha', 3: 'haha', 4: 'haha'}
    字符串同样也可以作为序列类型传入,该方法会将每个字符遍历出来作为新字典的key值。

    d3 = dict.fromkeys('1234', 'gogo')
    print(d3)
    

    打印结果:{'1': 'gogo', '2': 'gogo', '3': 'gogo', '4': 'gogo'}
    fromkeys方法只能接收两个参数,所以它可以创建一个只有默认value的字典。

    更新、拷贝与删除

    1、update方法
    update方法可以更新字典中的键值对。
    它接收两种类型的参数:字典和映射。

    d = {
        'name': 'alex',
        'age': 18,
        'gender': 'male',
        'married': True
    }
    
    # 第一种方式:将字典作为参数传入
    d.update({'name': 'Tom', 'home': 'hangzhou'})
    print(d)
    

    打印结果:

    {'name': 'Tom', 'age': 18, 'gender': 'male', 'married': True, 'home': 'hangzhou'}
    

    可以看到,update方法会将传入参数中已存在的key所对应的value进行更新;如果key值不存在,则会在字典中创建新的键值对。
    还有另一种传值方式,key=value:

    d.update(name='Harry',eduyears=20)
    print(d)
    

    打印结果:

    {'name': 'Harry', 'age': 18, 'gender': 'male', 'married': True, 'eduyears': 20}
    

    可以采用key=value的方式对字典进行更新。使用这种方式时,传入的参数实际上被视为关键字参数进行处理,所以此时的key必须遵守变量的命名规则

    2、copy方法
    与列表中的copy方法一致,该方法也是复制一份字典,这种拷贝同样属于浅拷贝。参见关于深浅拷贝的文章。

    3、clear、pop、popitem方法
    clear方法是清空列表,pop方法用来删除字典中的键值对,但是字典中的pop方法必须指定所删除的key,返回值则是key所对应的value。

    d = {
        'name': 'alex',
        'age': 18,
        'gender': 'male',
        'married': True
    }
    
    v = d.pop('married')
    print(v)
    

    打印结果:True
    popitem则是删除并返回字典的最后一项,它不需要任何参数。

    d = {
        'name': 'alex',
        'age': 18,
        'gender': 'male',
        'married': True,
        'eduyears': 16
    }
    
    v1 = d.popitem()
    print(v1)
    
    v2 = d.popitem()
    print(v2)
    

    打印结果:

    ('eduyears', 16)
    ('married', True)
    

    python字典无序?有序?

    默认情况下Python的字典输出顺序是按照键的创建顺序。

    字典的无序是指,不能人为重新排序。
    比如说你按键值1,2,3,4的顺序创建的字典,只能由解析器按创建顺序,还是1,2,3,4的输出。
    你无法控制它按照4,3,2,1的顺序输出,你也无法做到1,3,2,4的顺序。

    而且这个输出顺序是也不是能真正按照创建顺序可以控的。
    这里面有两个影响因素:
    (1)键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。
    (2)字典空间扩容,当键的数量超过字典默认开的空间时,字典会做空间扩容,扩容后的键顺序和创建顺序就会发生变化,不受人为控制。

    参考链接:https://www.cnblogs.com/yibeimingyue/p/9977164.html

  • 相关阅读:
    Cocos2d-X 精灵、动作效果
    android动画介绍之 自己定义Animation动画实现qq抖一抖效果
    C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)
    Redis深入之对象
    【POJ 3694】 Network(割边<桥>+LCA)
    Swift学习笔记(十四)——字符,常量字符串与变量字符串
    关于tomcat session机制梳理
    【机器学习算法-python实现】採样算法的简单实现
    分公司=一部门——组合模式
    临渊慕鱼,不如退而结网!
  • 原文地址:https://www.cnblogs.com/guyexiangyun/p/10249212.html
Copyright © 2020-2023  润新知