如何在python 3.6中将变量定义为字典

时间:2018-09-16 23:41:01

标签: python python-3.x

我正在尝试制作一个程序,该程序使用文本文件的内容并将其用作字典。

当我输入这段代码时;

A=open("dic.txt","r")
print(A.read())

if "A" in A:
    print("spam")
else:
    print("eggs")

我得到以下输出:

{"A":1}
eggs

我想要的是这个

{"A":1}
spam

关于如何做到这一点的任何想法?我不明白为什么它不起作用。

这些是文本文件的内容:

{"A":1}

2 个答案:

答案 0 :(得分:3)

有效版本可能是:

09-18 01:39:49.631 18508-18803/? E/AndroidRuntime: FATAL EXCEPTION: Thread-5
    Process: ma.ac.iav.myapplication, PID: 18508
    java.lang.InternalError: Thread starting during runtime shutdown
        at java.lang.Thread.nativeCreate(Native Method)
        at java.lang.Thread.start(Thread.java:733)
        at android.app.SharedPreferencesImpl.startLoadFromDisk(SharedPreferencesImpl.java:119)
        at android.app.SharedPreferencesImpl.<init>(SharedPreferencesImpl.java:112)
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:392)
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:373)
        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167)
        at cat.ereza.customactivityoncrash.CustomActivityOnCrash.getLastCrashTimestamp(CustomActivityOnCrash.java:673)
        at cat.ereza.customactivityoncrash.CustomActivityOnCrash.hasCrashedInTheLastSeconds(CustomActivityOnCrash.java:683)
        at cat.ereza.customactivityoncrash.CustomActivityOnCrash.access$200(CustomActivityOnCrash.java:52)
        at cat.ereza.customactivityoncrash.CustomActivityOnCrash$1.uncaughtException(CustomActivityOnCrash.java:112)
        at org.acra.builder.ReportExecutor.endApplication(ReportExecutor.java:269)
        at org.acra.builder.ReportExecutor.dialogAndEnd(ReportExecutor.java:254)
        at org.acra.builder.ReportExecutor.access$400(ReportExecutor.java:42)
        at org.acra.builder.ReportExecutor$2.run(ReportExecutor.java:217)

答案 1 :(得分:-2)

您当前的代码有一些问题:

  1. 您永远不会存储文件的内容
  2. 您实际上从不制作字典
  3. 文件对象的read()方法返回字符串,而不是字典
  4. 您从未关闭文件

要解决此问题,您可以 使用Python内置的eval来解析字符串中的字典,但这可能很危险且不可靠。

此外,您还可以通过“扩展”代码来解决类似的未来问题,这意味着通过使用清晰的变量名和良好的间距使代码更易于阅读,从而易于调试:

file       = open("dic.txt", "r")
contents   = file.read()
dictionary = eval(contents) # VERY dangerous

if "key" in A:
    print("key is in dictionary! :)")
else:
    print("key is not in dictionary! :(")

file.close()

希望这会有所帮助!

编辑:与该线程上的其他张贴者一样,我也认为eval很少应使用,但在我看来,这似乎是针对此特定问题的最简单解决方案。我不建议将eval用于类似这样的其他问题,除非您确切地知道您在做什么。其他使用literal_eval的解决方案可能比这个更好(它们甚至在我的发布之前);我只是在描绘另一个可能很有趣的解决方案。向任何被误导的人和任何被冒犯的Pythoner致歉。