Я пытаюсь создать очень маленькую «базу данных», используя словарь в python, который в конечном итоге будет храниться как json / text.

Прямо сейчас он хранит только ключ (str или int) и значение как список других словарей и списков. Но поскольку dict хранит только два элемента (ключи и значения), можно ли добавить третий элемент без создания нового dict или списка для извлечения данных? Я думал о смене ключей в список из двух значений, но не знаю, как я смогу искать по ключам. Я не хочу добавлять больше списка и словаря к более сложному анализу.

Нужно ли использовать что-то другое вместо словаря, или я просто думаю об этом все неправильно?

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

Короче говоря, я пытаюсь извлечь данные из csv и электронных таблиц и поместить их в базу данных, чтобы их можно было легко читать и записывать. Поэтому я думаю, что это лучшее, что я смог придумать, не знаю, смогу ли я улучшить его еще больше.

Например: Страна, США, Штат, Нью-Йорк, Город, Нью-Йорк, Zip, 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}
           }
    }
0
Da Jankee 10 Ноя 2019 в 02:56
1
Вы хотите добавить несколько ключей для одного и того же значения?
 – 
Chetan Goyal
10 Ноя 2019 в 04:35
Да что-то вроде тройни
 – 
Da Jankee
10 Ноя 2019 в 09:24

1 ответ

Возможно, вам придется объяснить больше, потому что я не понимаю, почему вы храните только одну пару ключ-значение в каждом диктовке.

Можно создать многозначные ключи с кортежами.

(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:{}
}
1
zweistein 10 Ноя 2019 в 16:52
Как вы получите доступ к «некоторому значению», когда у вас есть только key1 и нет информации о других ключах.
 – 
Chetan Goyal
10 Ноя 2019 в 04:32
99: {{}}, 100:{{}} Эта часть выдает ошибку, TypeError: unhashable type: 'dict'
 – 
Chetan Goyal
10 Ноя 2019 в 04:38
Извините. Я сделал ошибку. Исправили пример кода
 – 
zweistein
10 Ноя 2019 в 04:46
Stackoverflow: как искать частичный ключ ссылку
 – 
zweistein
10 Ноя 2019 в 04:50
Теперь в этом есть смысл.
 – 
Chetan Goyal
10 Ноя 2019 в 04:53