猿问

用新值替换 Python 字典值

我正在使用文件的值来创建填充字典。我使用函数创建了文件:


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)

如何从字典中删除旧字符并将其替换为新字符?


郎朗坤
浏览 91回答 3
3回答

斯蒂芬大帝

我将回答我认为您要问的问题。如果我误解了,请纠正我!我相信您在问如何将 txt 文件中的数字读取为整数。不幸的是,我不完全知道这个文件的目的或结构是什么,但我猜想它是将@符号左侧括号内的文本映射到括号内的文本到@ 符号的右侧。根据您的代码文件示例,这将是{'abc': 3, 'def': 'ghj'}.为此,您可以使用 python 字符串方法 .isdigit() 并在它返回 true 时转换为 int ,或者如果您认为大多数值将是整数,您也可以尝试使用 ValueError 除外它。这是两种方法:# PSEUDOCODEfile_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 dictionaryfile_dictionary['abc'] = 3  # file_dictionary now = {'abc': 3, 'abd': 3}file_dictionary.pop('abd')  # file_dictionary now = {'abc': 3}

当年话下

希望在这个奇怪的时期一切顺利。首先,您可以使用格式化来简化您的代码编写。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)

慕侠2389804

您正在测试解码时的数字,但您可以尝试将其设为 anint并在失败时捕获异常。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)
随时随地看视频慕课网APP

相关分类

Python
我要回答