Задать вопрос
@lalalapsha

Как удалить объект из словаря python по номеру?

Кратко:Удаление из словаря по номеру записи. При удалении пследовательность должна подстраиваться под новый список. Проблемма в том, чтобы связать новый номер из последовательности к нужной записи в словаре. Подробности ниже.
Выводятся все записи в словаре из json файла. Понимаю, что в словарях нет индекса, но нужно, чтобы выводилось примерно так:
1.Запись№1
2.Запись№2
3Записть№3
4...
Вводится номер из клавиатуры в соответствии с тем что выше.
Удаляется запись под тем номером который выбрали. Я это реализовал, но если повторно запросить удаление по списку, то:
допустим сначала мы удалили №2, тогда в файле останутся объекты под номерами 1,3, 4,5,...
Когда мы выведем словарь в следующий раз мы не получим правильную последовательность которая будет соответствовать записям в словаре. Как быть в таком случае? Очень нужна помощь. Вот функция которая отвечает за удаление, а ниже полный код.
К сожалению есть только украинский язык.
def menu_4():
    print('За якими ознаками видалити запис?', '1. По номеру в списку', '2. По наявності гарантії', sep='\n')
    with open('zamov_f.json', 'r') as zamov_f:
        zamov_f = json.load(open('zamov_f.json'))
    if input() == '1':
        for g1 in range(1, len(zamov_f) + 1):
            pib_n2 = 'pib' + str(g1)
            print(g1, zamov_f[pib_n2]['ПІБ'])
        delet = input()
        pib_n2 = 'pib' + delet
        del zamov_f[pib_n2]
        #print(tabulate(zamov_f[pib_n2].items(), headers=['Пункт', 'Параметр'], tablefmt="grid"))
        with open('zamov_f.json', 'w') as zamov_f1:
            json.dump(zamov_f, zamov_f1, indent=1, ensure_ascii=False)
    elif input() =='2':
        for g1 in range(1, len(zamov_f) + 1):
            ...


Весь код:
import json
import os
from tabulate import tabulate

def menu_1():
    a1 = 1
    with open('zamov_f.json', 'w') as zamov_f:
        json.dump(a1, zamov_f, indent=2, ensure_ascii=False)
    print('Файл створено')
    menu()

def menu_2():
    with open('zamov_f.json', 'r') as zamov_f:
        zamov_f = json.load(open('zamov_f.json'))
    if os.stat('zamov_f.json').st_size == 1:
        print('Файл пустий')
    else:
        for g in range(1, len(zamov_f) + 1):
            pib_n2 = 'pib' + str(g)
            print(tabulate(zamov_f[pib_n2].items(), headers=['Пункт', 'Параметр'], tablefmt="grid"))

    menu()

def menu():
    print('Виберіть пункт з меню:')
    print('1. Створення нового файлу замовлень на фарбування авто')
    print('2. Перегляд існуючого файлу')
    print('3. Додавання замовлень на фарбування')
    print('4. Видалення записів з файлу')
    print('5. Редагування записів')
    print('6. Сортування записів')
    print('7. Обслуговування запитів')
    otvet = input()
    if otvet == '1':
        menu_1()
    elif otvet == '2':
        menu_2()
    elif otvet == '3':
        menu_3()
    elif otvet == '4':
        menu_4()
    elif otvet == '5':
        menu_5()
    elif otvet == '6':
        menu_6()
    elif otvet == '7':
        menu_7()
    else:
        print('Введені дані некоректні або не вірні!')
        menu()



def menu_3():
    o = 1
    zamov_s = {}
    while True:
        while True:
            print("Введіть Ім'я Прізвище замовника")
            pib = input()
            pib = pib.strip()
            pib = pib.title()
            pib = " ".join(pib.split())
            pib2 = pib.split()
            pib = pib2[0] + pib2[1]
            if pib.isalpha() == True:
                pib = pib2[0] + ' ' + pib2[1]
                break
            else:
                print('''У вказаних даних неможна використовувати 
                цифри та спеціальні символи, а тільки букви 
                та пробіли. 
                ''')



        print('Виберіть тип фарби: ')
        print('1. Металік', '2. Блиск', '3. Вініл', sep='\n')
        tip = input()
        if tip != '1' and tip != '2' and tip != '3':
            print('Введені дані некоректні або не вірні!')
        print('Виберіть клас фаби: ')
        print('1. Економ', '2. Середній', '3. Преміум', sep='\n')
        klas = input()
        if klas != '1' and klas != '2' and klas != '3':
            print('Введені дані некоректні або не вірні!')
        print('Виберіть колір фарби: ')
        print('1. Red', '2. Green', '3. Brown', '4. Black', '5. White', sep='\n')
        color = input()
        if color != '1' and color != '2' and color != '3' and  color != '4' and color != '5':
            print('Введені дані некоректні або не вірні!')
        termin = int(input('Введіть термін роботи: '))
        garant = input('Чи потрібна гарантія? (+/-) ')
        if garant != '+' and garant != '-':
            print('Введені дані некоректні або не вірні!')
        if tip == '1':
            tip = "Metalik"
        elif tip == '2':
            tip = "Blisk"
        elif tip == '3':
            tip = "Vinil"
        if klas == '1':
            klas = 'Ekonom'
        elif klas == '2':
            klas = 'Midl'
        elif klas == '3':
            klas = 'Premium'
        if color == '1':
            color = 'Red'
        elif color == '2':
            color = 'Green'
        elif color == '3':
            color = 'Brown'
        elif color == '4':
            color = 'Black'
        elif color == '5':
            color = 'White'

        with open('baza_farb.json', 'r') as baza_f:
            baza_f = json.load(open('baza_farb.json'))
        prise = baza_f[tip][klas][color]

        if 3 <= termin <= 5:
            prise = prise + (prise * 15 / 100)
        elif termin == 2:
            prise = prise + (prise * 50 / 100)
        if garant == '+':
            prise = prise + (prise * 5 / 100)
        pib_n = 'pib' + str(o)
        zamov_s[pib_n] = {
            'ПІБ': pib,
            'Тип фарби': tip,
            'Клас фарби': klas,
            'Колір фарби': color,
            'Термін роботи': termin,
            'Гарантія на фарбу': garant,
            'Ціна': prise
        }
        o = o + 1
        with open('zamov_f.json', 'w') as zamov_s2:
            json.dump(zamov_s, zamov_s2, indent=2, ensure_ascii=False)

        print('Ввести наступне замовлення?(-/+)')
        if input() == '-':
            menu()
            break
def menu_4():
    print('За якими ознаками видалити запис?', '1. По номеру в списку', '2. По наявності гарантії', sep='\n')
    with open('zamov_f.json', 'r') as zamov_f:
        zamov_f = json.load(open('zamov_f.json'))
    if input() == '1':
        for g1 in range(1, len(zamov_f) + 1):
            pib_n2 = 'pib' + str(g1)
            print(g1, zamov_f[pib_n2]['ПІБ'])
        delet = input()
        pib_n2 = 'pib' + delet
        del zamov_f[pib_n2]
        #print(tabulate(zamov_f[pib_n2].items(), headers=['Пункт', 'Параметр'], tablefmt="grid"))
        with open('zamov_f.json', 'w') as zamov_f1:
            json.dump(zamov_f, zamov_f1, indent=1, ensure_ascii=False)

    elif input() =='2':
        for g1 in range(1, len(zamov_f) + 1):
            ...

menu()
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы