zoukankan      html  css  js  c++  java
  • Python 创建字典与fromkeys的坑

    字典很重要

    字典dict 是Python中很重要的一个数据类型, 通过键值映射, 能够很好的定位查找.

    Django, Flask这些Web框架在做前后端分离时, 就是用字典传数据的, 因为它和列表list 配合起来, 能够很好的与json格式的数据相互转化. 用Flask + Echarts做数据可视化大屏, 传的变量都是字典和列表.

    简单创建字典

    这是最简单的创建字典的方式:

    dic = {'key1': 'value1', 'key2': 'value2'}
    dic = dict(key1='value1', key2='value2')
    

    快速创建字典

    但当数据特别多的时候, 一个个手敲键值构造字典, 这样非常麻烦.

    Python提供了许多快速创建字典的方式,

    >>> d = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
    >>> d
    {'one': 1, 'two': 2, 'three': 3}
    
    >>> d = dict([('two', 2), ('one', 1), ('three', 3)])
    >>> d
    {'two': 2, 'one': 1, 'three': 3}
    

    nb的fromkeys

    除此之外还有一个超级nb的方法, fromkeys. 为什么说他nb呢?

    https://docs.python.org/3/library/stdtypes.html#dict.fromkeys

    >>> import numpy as np
    
    >>> data = dict.fromkeys(np.arange(10))
    >>> data
    {0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
    >>> data = dict.fromkeys(np.arange(10), '都是一样的')
    >>> data
    {0: '都是一样的', 1: '都是一样的', 2: '都是一样的', 3: '都是一样的', 4: '都是一样的', 5: '都是一样的', 6: '都是一样的', 7: '都是一样的', 8: '都是一样的', 9: '都是一样的'}
    

    比如我执行一个sql语句, 返回一个巨大的元组或列表, 而我又暂时不确定它的值是什么, 就可以这样批量创建, 值先为None, 或者随便赋一个值

    我对它真是有爱又恨, 它的一个弊端: 值必须是一个不可变对象

    • 可变对象: int, str, float, tuple

    • 不可变对象: list, dict

    这意味着不可以设它的值为list 或dict, 这可糟了呀, 往Echarts传值大多都是dict+list, 还有pandas中的DataFrame等都是dict+list的格式, 像这种:

    from pandas import DataFrame
    
    data = {
        'Singer': ['the rolling stones', 'Beatles', 'Guns N Roses', 'Metalica'],
        'Song_name': ['Satisfaction', 'Let it Be', 'Don’t Cry', 'Nothing Else Matters'],
        'Year': [2000, 2001, 2000, 2002]
    }
    music_data2 = DataFrame(data)
    

    看一看如果偏要设值为list对发生什么:

    >>> import numpy as np
    
    >>> data = dict.fromkeys(np.arange(10), [])
    >>> data[1].append('a')
    >>> data
    {0: ['a'], 1: ['a'], 2: ['a'], 3: ['a'], 4: ['a'], 5: ['a'], 6: ['a'], 7: ['a'], 8: ['a'], 9: ['a']}
    

    wc***, fromkeys你不讲码德, 我只是修改了键为1的值, 怎么全都修改了!!!

    那就这样完了吗?

    可以先把设为一个不可变类型, 比如字符串str, 最后再将它转化成想要的列表就成功啦

    >>> import numpy as np
    
    >>> data = dict.fromkeys(np.arange(10), '')
    >>> data[1] += 'a,'
    >>> data[1] += 'b,'
    >>> data = {key: value.split(',')[:-1] for key, value in data.items()}
    >>> data
    {0: [], 1: ['a', 'b'], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []}
    
  • 相关阅读:
    METHODS OF AND APPARATUS FOR USING TEXTURES IN GRAPHICS PROCESSING SYSTEMS
    Display controller
    Graphics processing architecture employing a unified shader
    Graphics-Processing Architecture Based on Approximate Rendering
    Architectures for concurrent graphics processing operations
    Procedural graphics architectures and techniques
    DYNAMIC CONTEXT SWITCHING BETWEEN ARCHITECTURALLY DISTINCT GRAPHICS PROCESSORS
    Thermal zone monitoring in an electronic device
    System and method for dynamically adjusting to CPU performance changes
    Framework for Graphics Animation and Compositing Operations
  • 原文地址:https://www.cnblogs.com/pineapple-py/p/14176629.html
Copyright © 2011-2022 走看看