Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字典值与多个项目存储为列表或字典是否更好?_Python_List_Dictionary - Fatal编程技术网

Python 将字典值与多个项目存储为列表或字典是否更好?

Python 将字典值与多个项目存储为列表或字典是否更好?,python,list,dictionary,Python,List,Dictionary,我正在用Python编写一个八叉树类型的东西,目前它只能存储一个ID。但是,我想更改它,以便它可以存储任意数量的东西,我不确定哪种方式更适合于数千个值 将其存储为普通列表可以吗?在向代码添加内容时在索引中添加硬代码,还是将其存储为字典以便更容易获得所需的值更好 =[ID,stuff1,stuff2…] ={'ID':num,'stuff1':something,'stuff2':something} 如果您希望使用第一种方式获得ID,可以使用体素信息[0],但随着添加更多值,它可能会变得更复杂

我正在用Python编写一个八叉树类型的东西,目前它只能存储一个ID。但是,我想更改它,以便它可以存储任意数量的东西,我不确定哪种方式更适合于数千个值

将其存储为普通列表可以吗?在向代码添加内容时在索引中添加硬代码,还是将其存储为字典以便更容易获得所需的值更好

  • =[ID,stuff1,stuff2…]

  • ={'ID':num,'stuff1':something,'stuff2':something}
  • 如果您希望使用第一种方式获得ID,可以使用
    体素信息[0]
    ,但随着添加更多值,它可能会变得更复杂,例如
    所有者=体素信息[4];importantText=voxel_info[5]
    (您必须记住哪个索引与代码中所有点的内容相关),或者使用字典方式,如果添加了更多内容,则获取值会容易得多

    字典方式似乎更有用,但它似乎也会降低代码的速度,并使用更多的内存,因为它存储了数千个字典的文本键。你可能会推荐哪种方式

    为了了解数据是如何存储的,是这样的。如果所有块信息相同,则项目将被分组,因此您将获得不同的深度。
    BLOCKINFO
    部分是存储信息的地方,这就是我要问的关于列表或字典的问题

    OctreeData={ Depth: 2
                 Nodes: (1,1,1): {Depth:1
                                Nodes: (1,1,1): BLOCKINFO
                                       (1,1,-1): {Depth: 0
                                                Nodes: (1,1,1): BLOCKINFO
                                                       (1,1,-1): BLOCKINFO
                                                       (1,-1,-1): BLOCKINFO
                                                       etc
                                       (1,-1,-1): BLOCKINFO
                                       (-1,-1,-1): BLOCKINFO
                                       (-1,-1,1): {Depth: 0
                                                   Nodes: etc
                                       etc
                        (1,1,-1): BLOCKINFO
                        etc
               }
    

    这实际上取决于您的项目列表有多大以及您希望如何访问它们

    [[ID,stuff1,stuff2,stuff3],[ID,stuff1,stuff2,stuff3],...]
    
    将使用
    O(N)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    同样地

    [{'ID':'id','stuff':[1,2,3]},{'ID':'id','stuff':[1,2,3]}]
    
    将使用
    O(n)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    但是,只需要
    O(1)
    进行搜索(假设您在id上搜索)


    但实际上,我建议使用数据库(+如果你聪明的话,使用orm)

    这实际上取决于你的项目列表有多大以及你想如何访问它们

    [[ID,stuff1,stuff2,stuff3],[ID,stuff1,stuff2,stuff3],...]
    
    将使用
    O(N)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    同样地

    [{'ID':'id','stuff':[1,2,3]},{'ID':'id','stuff':[1,2,3]}]
    
    将使用
    O(n)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    但是,只需要
    O(1)
    进行搜索(假设您在id上搜索)


    但实际上,我建议使用数据库(+如果你聪明的话,使用orm)

    这实际上取决于你的项目列表有多大以及你想如何访问它们

    [[ID,stuff1,stuff2,stuff3],[ID,stuff1,stuff2,stuff3],...]
    
    将使用
    O(N)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    同样地

    [{'ID':'id','stuff':[1,2,3]},{'ID':'id','stuff':[1,2,3]}]
    
    将使用
    O(n)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    但是,只需要
    O(1)
    进行搜索(假设您在id上搜索)


    但实际上,我建议使用数据库(+如果你聪明的话,使用orm)

    这实际上取决于你的项目列表有多大以及你想如何访问它们

    [[ID,stuff1,stuff2,stuff3],[ID,stuff1,stuff2,stuff3],...]
    
    将使用
    O(N)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    同样地

    [{'ID':'id','stuff':[1,2,3]},{'ID':'id','stuff':[1,2,3]}]
    
    将使用
    O(n)
    进行搜索

    {'ID1':['stuff1','stuff2','stuff3'],
     'ID2':['stuff1','stuff2','stuff3'],
     'ID3':['stuff1','stuff2','stuff3']}
    
    但是,只需要
    O(1)
    进行搜索(假设您在id上搜索)


    但实际上,我建议使用数据库(如果你聪明的话,可以使用orm)

    混合使用
    dicts
    列表也没什么错

    这可以为您提供比仅使用一种结构更优雅的解决方案

    my_data = [
        { 'ID' : 1, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 2, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 3, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
    ]
    
    或者

    就个人而言,我会选择选项1。为什么?列表中的每个词典都具有相同的结构。这使得它更清晰,更容易理解

    至于搜索,您可以使用过滤器:

    from functools import partial
    
    def custom_filter(data, filter_value=None):
        if data['ID'] == filter_value:
            return True
        return False
    
    filter_on = 1
    print filter(partial(custom_filter, filter_value=filter_on), my_data)
    

    混合使用
    指令
    列表
    没有什么错

    这可以为您提供比仅使用一种结构更优雅的解决方案

    my_data = [
        { 'ID' : 1, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 2, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 3, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
    ]
    
    或者

    就个人而言,我会选择选项1。为什么?列表中的每个词典都具有相同的结构。这使得它更清晰,更容易理解

    至于搜索,您可以使用过滤器:

    from functools import partial
    
    def custom_filter(data, filter_value=None):
        if data['ID'] == filter_value:
            return True
        return False
    
    filter_on = 1
    print filter(partial(custom_filter, filter_value=filter_on), my_data)
    

    混合使用
    指令
    列表
    没有什么错

    这可以为您提供比仅使用一种结构更优雅的解决方案

    my_data = [
        { 'ID' : 1, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 2, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 3, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
    ]
    
    或者

    就个人而言,我会选择选项1。为什么?列表中的每个词典都具有相同的结构。这使得它更清晰,更容易理解

    至于搜索,您可以使用过滤器:

    from functools import partial
    
    def custom_filter(data, filter_value=None):
        if data['ID'] == filter_value:
            return True
        return False
    
    filter_on = 1
    print filter(partial(custom_filter, filter_value=filter_on), my_data)
    

    混合使用
    指令
    列表
    没有什么错

    这可以为您提供比仅使用一种结构更优雅的解决方案

    my_data = [
        { 'ID' : 1, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 2, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
        { 'ID' : 3, 'stuff' : ['stuff1', 'stuff2', 'stuff3']},
    ]
    
    或者

    就个人而言,我会选择选项1。为什么?列表中的每个词典都具有相同的结构。这使得它更清晰,更容易理解

    至于搜索,您可以使用过滤器:

    from functools import partial
    
    def custom_filter(data, filter_value=None):
        if data['ID'] == filter_value:
            return True
        return False
    
    filter_on = 1
    print filter(partial(custom_filter, filter_value=filter_on), my_data)
    

    使用一个类或一个类。“但它似乎也会降低代码的速度,并在为数千个字典存储文本键时使用更多内存。”在实际实现它并观察到性能问题之前,不要担心这一点。任何更快的事情都是过早的优化。无论如何,数千个键就像10千字节,不值得大惊小怪。有了字典,你可以更好地控制你的数据。这个问题没有一刀切的答案,但从语义角度来看,使用带有硬编码索引的异构列表是错误的-这就是元组的用途(它们也比列表便宜),您可以为索引使用命名常量(即
    ID=0;'stuff1'=1;
    等)。但凯文的评论主要是针对这一点的:这仍然是过早的优化。这个问题并不真的适合如此。。。在这里,
    dict
    胜过
    列表
    ,但
    dict
    实际上适用于任意键。由于您的密钥集是固定的(并且只有在更新程序时才会更改),因此
    namedtuple
    更合适。和
    namedtuple
    s是非常有效的。使用类或类。“但它似乎也会降低代码的速度,并在为数千个字典存储文本键时使用更多内存。”在实际实现它并观察到性能问题之前,不要担心这一点。任何更快的事情都是过早的优化。不管怎样,t