为了账号安全,请及时绑定邮箱和手机立即绑定

用新值替换 Python 字典值

用新值替换 Python 字典值

郎朗坤 2022-11-01 14:33:10
我正在使用文件的值来创建填充字典。我使用函数创建了文件: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 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

我将回答我认为您要问的问题。如果我误解了,请纠正我!


我相信您在问如何将 txt 文件中的数字读取为整数。不幸的是,我不完全知道这个文件的目的或结构是什么,但我猜想它是将@符号左侧括号内的文本映射到括号内的文本到@ 符号的右侧。根据您的代码文件示例,这将是{'abc': 3, 'def': 'ghj'}.


为此,您可以使用 python 字符串方法 .isdigit() 并在它返回 true 时转换为 int ,或者如果您认为大多数值将是整数,您也可以尝试使用 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}


查看完整回答
反对 回复 2022-11-01
?
当年话下

TA贡献1890条经验 获得超9个赞

希望在这个奇怪的时期一切顺利。


首先,您可以使用格式化来简化您的代码编写。


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)


查看完整回答
反对 回复 2022-11-01
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您正在测试解码时的数字,但您可以尝试将其设为 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)


查看完整回答
反对 回复 2022-11-01
  • 3 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信