Python3使用用户输入访问另一个文件中的字典

Python3使用用户输入访问另一个文件中的字典,python,dictionary,input,Python,Dictionary,Input,我想获取用户输入(当前_输入),并使用它访问名为(john.py)文件中名为(john)的字典。如果用户输入john,我希望for语句检查john.john并打印出键(x)和属性(john.john[x])。有什么想法吗 import john current_fugitive = input("Please enter the name of the fugitive: ") if current_fugitive =="john": for x in current_fugitive

我想获取用户输入(当前_输入),并使用它访问名为(john.py)文件中名为(john)的字典。如果用户输入john,我希望for语句检查john.john并打印出键(x)和属性(john.john[x])。有什么想法吗

import john
current_fugitive = input("Please enter the name of the fugitive: ")
if current_fugitive =="john":
    for x in current_fugitive.current_fugitive:
        print(x, current_fugitive.current_fugitive[x])
(编辑) 运行的原始代码:

if current_fugitive =="john":
for x in john.john::
    print(x, john.john[x])

你不想这么做。这是初学者在给变量名赋值时经常犯的错误。不要这样做——你的值是有意义的,但是你的变量名应该是好的,描述性的名称,对程序员来说很清楚,但对程序来说毫无意义

很可能,
john.py
应该是
john.json
,您应该执行以下操作:

from pathlib import Path
import json

fugitives = {}

for fugitive_json in Path(__file__).glob("*.json"):
    # find all the *.json files that are sibling to the current file
    with fugitive_json.open() as f:
        new_fugitive = json.load(f)
        fugitives[fugitive_json.stem] = new_fugitive
        # Path("path/to/john.json").stem == "john"

user_input = input("Which fugitive? ")
try:
    fugitive = fugitives[user_input]
except KeyError:
    # what do you do when the user enters a bad name?
    # maybe...
    raise

你不想这么做。这是初学者在给变量名赋值时经常犯的错误。不要这样做——你的值是有意义的,但是你的变量名应该是好的,描述性的名称,对程序员来说很清楚,但对程序来说毫无意义

很可能,
john.py
应该是
john.json
,您应该执行以下操作:

from pathlib import Path
import json

fugitives = {}

for fugitive_json in Path(__file__).glob("*.json"):
    # find all the *.json files that are sibling to the current file
    with fugitive_json.open() as f:
        new_fugitive = json.load(f)
        fugitives[fugitive_json.stem] = new_fugitive
        # Path("path/to/john.json").stem == "john"

user_input = input("Which fugitive? ")
try:
    fugitive = fugitives[user_input]
except KeyError:
    # what do you do when the user enters a bad name?
    # maybe...
    raise
你是说这个吗


你是说这个吗




上面的代码怎么了?@AkshayNevrekar。抛出的第一个错误可能是
AttributeError
,因为他正试图访问
“john”.current\u sensitive
。对于current\u sensitive中的x.current\u sensitive:AttributeError:“str”对象没有属性“current\u sensitive”。这里唯一的错误是在my for语句中使用输入变量,并在字典..上面的代码怎么了?@AkshayNevrekar。抛出的第一个错误可能是
AttributeError
,因为他正试图访问
“john”.current\u sensitive
。对于current\u sensitive中的x.current\u sensitive:AttributeError:“str”对象没有属性“current\u sensitive”。这里唯一的错误是在my for语句中使用输入变量,并在字典..这段代码对我来说完全陌生,因为我刚刚学习Python 3。也许我想用它做的事情有点超出了我作为初学者的范围。@Jason如果你指出你不理解代码的地方,我可以帮你。我在特别难理解的部分留下了评论。这段代码对我来说完全陌生,因为我刚刚学习Python 3。也许我想用它做的事情有点超出了我作为初学者的范围。@Jason如果你指出你不理解代码的地方,我可以帮你。我在特别难以“摸索”的部分留下了评论。除了提升糟糕的代码架构之外,这段代码还有一些不明显的问题。PEP8,对于一个(两个空格缩进?pshaw.),但更紧迫的是,如果
getattr(john,current)
是一个空的dict怎么办?或
False
,或
0
?所有这些都会沿着表示变量不存在的代码路径进行。如果d为None:print(…),则快速修复方法是
,但真正的解决方案是“不要这样做”。谢谢您的评论。我只是用javaScript编写代码,忘了将编辑器的自动识别设置为4个空格。更新后的版本会更好吗@AdamSmithSo如果我使用了多个fugative,那么d=getattr(john,user\u input,None)将无法正常工作,比如chad和ricky。@Jason如果你想要多个Fugative,我认为你可以编写一个函数来获取你需要的所有Fugative。或者用另一种方法实现它。基本上,这不是从其他文件加载数据的好方法。除了它促进了糟糕的代码体系结构之外,这段代码还有一些不明显的问题。PEP8,对于一个(两个空格缩进?pshaw.),但更紧迫的是,如果
getattr(john,current)
是一个空的dict怎么办?或
False
,或
0
?所有这些都会沿着表示变量不存在的代码路径进行。如果d为None:print(…)
,则快速修复方法是
,但真正的解决方案是“不要这样做”。谢谢您的评论。我只是用javaScript编写代码,忘了将编辑器的自动识别设置为4个空格。更新后的版本会更好吗@AdamSmithSo如果我使用了多个fugative,那么d=getattr(john,user\u input,None)将无法正常工作,比如chad和ricky。@Jason如果你想要多个Fugative,我想你可以编写一个函数来获取你需要的所有Fugative。或者用另一种方法实现它。基本上,这不是从其他文件加载数据的好方法。