首页 > 解决方案 > 用于存储信息和检索的字典的替代品?

问题描述

我正在尝试使用 python 中的字典创建一个非常小的“数据库”,最终将存储为 json/text。

现在它只存储一个键(str 或 int)和值作为更多字典和列表的列表。但是由于 dict 只存储两个项目(键和值),是否可以在不创建新的 dict 或列表进行数据检索的情况下添加第三个项目?我想将键更改为两个值的列表,但不知道如何通过键进行搜索。我不想添加更多列表和字典,使解析更加困难。

我是否需要使用其他东西而不是字典,还是我只是在想这一切都错了?

DataBase = [
    {9: [
        {1: [
            {100: "something"},
            {200: "something else"}
            ]
        },
        {2: [
            {112: "something different"},
            {153: "blank"}
            ]
        }
    ]
    },
    {99: [{}]},
    {100: [{}]}
]

简而言之,我想做的是从 csv 和电子表格中提取数据,然后放入某种数据库中以便能够轻松地读取和写入。所以我认为这是我能想到的最好的,不知道我是否可以进一步改进它。

例如:国家、美国、州、纽约州、城市、纽约市、邮编、10001、姓名、约翰

    {(Country, USA):
          {(State, NY):
               {(City, NYC):
                    {(Zip, 10001): {Name: John}, (Zip, 11001): {Name: Jane}}
                }
           {(State, LA): {(City, notNYC):
                    {(Zip, 00001): {Name: Joe, Name: Jame}
           }
    }

标签: pythonjsondatabasedictionary

解决方案


您可能需要解释更多,因为我不明白为什么您只在每个字典中存储一个键值对。

可以使用元组创建多个值键。

(key1, key2, key3, keyn) : "some value"

一种搜索方法是使用过滤器。

database_triplets = {
             (1,2,3):"123",
             (1,3,2):"132",
             (2,9,8):"298"}

"""
partial_search(query, start_index = 0):
inputs:
     query: List with search terms.
     start_index: which index of key to look for the query (0 as default)
"""
def partial_search(query, start_index = 0):
    query_len =  len(query)

    """ tuples of lenght 1 are a little strange ie. (1,). 
        Therefore the input is list
    """
    query = tuple(query) 
    search_results =  list(filter(lambda x: x[start_index: start_index + query_len] == tuple(query), database_triplets))
    return search_results

# search for first partial key as 1 --> [(1,2,3), (1,3,2)]
print(partial_search([1])) 
# search for two last digits of partial key as [3,2] --> [1,3,2] 
print(partial_search([3,2], 1) 

您可能可以像这样简化数据库。这取决于您要完成的工作:

database =  {9: 
                {1:{100: "something",
                    200: "something else"},
                 2:{112: "something different", 
                    153: "blank"}},
             99: {},
             100:{}
}

推荐阅读