【问题标题】:dictionary code in file to dictionary in python文件中的字典代码到python中的字典
【发布时间】:2022-01-24 16:08:07
【问题描述】:

我有一个这样保存的 .txt 文件: {('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1 ): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0} 如果你像这样编码它应该成为一个字典dict = {('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0} 但是如果将文件中的文本导入到一个字符串中,那么该字符串就是原始文本(就像这个txtfromfile = "{('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0}",我这样做 dict = txtfromfile 它使 dict 成为字符串。有没有办法让它成为字典而不是字符串?

【问题讨论】:

  • 导入 json 然后使用 json.loads(string)
  • @JeremySavage 仅当字典键是字符串时才有效。不过,这里的键是元组。
  • 文本文件最初是如何创建的?它是否打算成为 JSON,但不是因为键是元组?
  • @jjramsey Ahh 不知道,谢谢!

标签: python file dictionary


【解决方案1】:

您可以使用ast 内置模块中的literal_eval 函数:

import ast

with open("myfile.txt", "r") as fp:
    mydict = ast.literal_eval(fp.read())

【讨论】:

    【解决方案2】:

    json.loads(text) 可以解决问题。 https://docs.python.org/3/library/json.html

    【讨论】:

    • 这不适用于以元组作为键的字典,这是开头的帖子。
    • 哦,拍得好。
    【解决方案3】:

    编辑:从评论中得知 eval 不应该用于此目的。解释here。正确的解决方案是建议ast.literal_eval()

    可以 不应使用以下方法来评估文本:

    txtfromfile = "{('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0}"
    
    my_dict = eval(txtfromfile)
    print(my_dict)
    

    输出:

    {('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0}
    

    【讨论】:

    • 请不要为这样的任务建议 eval 或 exec。
    猜你喜欢
    • 2012-01-22
    • 2019-05-16
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多