Заменить Python значение словаря новым значением - PullRequest
1 голос
/ 01 мая 2020

Я использую значения файла для создания словаря. Я создал файл с помощью функции:

def save_dict_to_file(filename, dictionary):  # done
    with open(filename, 'w') as w:
        for key in dictionary:
            w.write("(")
            w.write(key)
            w.write(")")
            w.write("@(")
            w.write(str(dictionary[key]))
            w.write(")")
            w.write("\n")

print (save_dict_to_file('save_dict_to_file_example.txt', {'abc':3,'def':'ghj'}))

Исходное содержимое файла:

(abc)@(3)
(def)@(ghj)

3 - это целое число. Я хотел бы сохранить тип данных в словаре, но в настоящее время словарь возвращает '3' в виде строки:

{'abc': '3', 'def': 'ghj'}

Вот мой полный код:

def load_dict_from_file(filename):
    with open(filename, 'r') as r:
        dictionary = dict()
        file_contents=r.readlines()
        for line in file_contents:
            #line=line.strip()
            index=line.index('@')
            key=line[1:index-1] #before the @
            value=line[index+2:-2] #after the @
            value=value.strip()
            dictionary[key]=value
            for character in key,value:
                if character.isdigit():
                    index_character=character.index
                    new_character = int(character)
                else:
                    continue
    print(dictionary)

Как удалить старый символ из словаря и заменить его новым?

Ответы [ 3 ]

1 голос
/ 01 мая 2020

Я собираюсь ответить на то, что я думаю, что вы спрашиваете. Пожалуйста, поправьте меня, если я неправильно истолковываю!

Я полагаю, вы спрашиваете, как вы можете прочитать числа в вашем текстовом файле как целые числа. К сожалению, я не знаю полностью, какова цель или структура этого файла, но я собираюсь догадаться, что он отображает текст в скобках слева от символа @ на текст, находящийся в скобках, на справа от символа @. Для вашего примера файла кода это будет {'abc': 3, 'def': 'ghj'}.

Чтобы сделать это, вы можете использовать python строковый метод .isdi git () и преобразовать в int, если он возвращает true, или вы можете просто попробовать исключить его с помощью ValueError, если вы считаете, что большинство значения будут целыми числами. Вот два подхода:

# PSEUDOCODE
file_dictionary = {}
for each line in file:
    key = ...
    value = ...
    # HERE GOES SOLUTION 1 OR 2

РЕШЕНИЕ 1:

if value.isdigit():
    file_dictionary[key] = int(value)
else:
    file_dictionary[key] = value

РЕШЕНИЕ 2: (быстрее, если вы знаете, что большинство будет целыми числами, но медленнее, если наоборот)

try:
    file_dictionary[key] = int(value)
except ValueError:
    file_dictionary[key] = value

Если вы хотите отредактировать значение словаря, вы можете просто получить доступ к значению, которое вы хотите отредактировать, и присвоить ему другое значение. Пример: file_dictionary['abc'] = 3 Если вы хотите отредактировать ключ, вам нужно будет присвоить значение новому ключу и удалить старый. Пример:

file_dictionary = {'abd' = 3}  # Create the dictionary
file_dictionary['abc'] = 3  # file_dictionary now = {'abc': 3, 'abd': 3}
file_dictionary.pop('abd')  # file_dictionary now = {'abc': 3}
0 голосов
/ 01 мая 2020

Вы проверяете цифры при декодировании, но вы можете просто попытаться сделать его int и перехватить исключение при сбое.

def load_dict_from_file(filename):
    with open(filename, 'r') as r:
        dictionary = dict()
        file_contents=r.readlines()
        for line in file_contents:
            #line=line.strip()
            index=line.index('@')
            key=line[1:index-1] #before the @
            value=line[index+2:-2] #after the @
            value=value.strip()
            # see if its an int
            try:
                value = int(value)
            execpt ValueError:
                pass
            dictionary[key]=value
    print(dictionary)
0 голосов
/ 01 мая 2020

Надеюсь, что все идет хорошо с вами в это странное время.

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

def save_dict_to_file(filename, dictionary):  # done
    with open(filename, 'w') as w:
    for key in dictionary:
        w.write("({})@({})\n".format(key, dictionary[key]))

Но есть более простые способы сохранить словарь в файле. Вы можете просто записать его в файл или выбрать его, например.

Для загружаемой части:

def load_dict_from_file(filename):
    with open(filename, 'r') as r:
        dictionary = {}
        file_contents = r.readlines()
        for line in file_contents:
            key, value = line.split('@')
            if key.isdigit():
                key = int(key.strip())
            if value.isdigit():
                value = int(value.strip())   
        dictionary[key]=value

    print(dictionary)

Надеюсь, это поможет. Берегите себя!

...