Упрощение создания динамического словаря и его циклический просмотр - PullRequest
0 голосов
/ 29 августа 2018

В настоящее время у меня есть словарь с заглавными буквами в качестве ключей и список в качестве значений. Список имеет описание в [0] и имя переменной, которая указывает на другой словарь в [1].

categories = {'A': ('Song Language', song_language),
              'B': ('Rythm/Genre', rythm_genre),
              'D': ('Atributes', atributes),
              'E': ('Region', region)
              }

song_language = {
    'A1': 'Spanish',
    'A2': 'English',
    'A3': 'Spanglish',
    'A4': 'Non S&E',
}

В случае categories['A'][1]['A2'] это равно English.

Ни один из этих словарей не доработан, то есть я постоянно обновляю их, чтобы добавлять записи. Это становится очень утомительным, чтобы:

  • Создание дополнительных словарей
  • Изменить существующие словари

Использование словарей заключается в их циклическом просмотре. Во-первых, перебираю словарь categories и вложенным способом я перебираю словарь, содержащийся в [1] списка.

Каждый раз я собираю данные, чтобы определить, должен ли я добавить ключ вложенного словаря в список. если пользователь вводит «YL» или «NL», скрипт выполнит некоторые действия и затем перейдет к следующему словарю.

for category_key in categories:
    next_dict = categories[category_key][1]
    dict_desc = categories[category_key][0]
    print(dict_desc, ": ", next_dict)
    for attribute in next_dict:
        prompt = "\tIs this song == "+next_dict[attribute]+"("+attribute+"): "
        add_to_list = input(prompt).upper()
        while add_to_list not in ('Y', 'YL', 'NN','NL','N'):
            prompt = "Is this song == " + next_dict[attribute] + "(" + attribute + "): "
            add_to_list = input(prompt).upper()
        if add_to_list == 'Y':
            comment_list.append(attribute)
        elif add_to_list == 'YL':
            comment_list.append(attribute)
            break
        elif add_to_list == 'NN':
            continue
        elif add_to_list == 'NL':
            break
        elif add_to_list == 'N':
            this_prompt = '\t\tDo you want to set any more '+dict_desc+' attributes: '
            any_more = input(this_prompt).upper()
            if any_more == 'Y':
                continue
            elif any_more == 'N':
                break

Опять же, моя цель состоит в том, чтобы вывести мои словари из моей программы и найти более эффективный способ их создания и управления, поскольку они постоянно меняются.

Я все еще хочу сохранить функциональность, позволяющую пользователю переходить к следующему словарю (категории).

Например, если пользователя спрашивают о языке и он определяет, что единственным применимым атрибутом является английский, он может ввести «YL», и это переместит его в словарь «Rhythm / Genre» вместо необходимости проходить через остаток от словаря song_language.

1 Ответ

0 голосов
/ 30 августа 2018

Я принял предложение @BillS и реализовал базу данных с двумя таблицами:

    import mysql.connector

    mydb = mysql.connector.connect(
      host='127.0.0.1',
      user='something',
      passwd='else',
      database='some_db'
    )

    mycursor = mydb.cursor(buffered=True)

    mycursor.execute("SELECT main, description FROM categories")
    main_categories = mycursor.fetchall()
    for letter, desc in main_categories:
      .
      .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...