我是python / programming的新手,甚至是json中的菜鸟。
我正在为我的附带项目制作字典应用程序,它工作正常,可以搜索单词并获得其定义,但是我想使其完美,并且我希望结果对于最终用户可读(我知道缩进,但我不希望括号和所有json格式出现在结果中)
这是我要从中提取数据的json:
{
"Bonjour": {
"English Word": "Hello",
"Type of word": "whatever",
"Defintion": "Means good day",
"Use case example": "Bonjour igo",
"Additional information": "BRO"
}
}
这是我用来获取值的代码(它不起作用),在这种情况下,“ search”变量是=到“ Bonjour”(这是用户输入)
currentword = json.load(data) #part of the "with open..."
for definition in currentword[search]['English Word', 'Definition', 'Use case example']:
print(definition)
我得到的错误如下:
KeyError: ('English Word', 'Definition', 'Use case example')
现在我不确定“ Bonjour”是键还是“英语单词”等...如果不是键,什么是“ Bonjour”
无论如何,我希望它打印“英语单词”的值,最好打印为“英语单词-VALUE / DEFINITION”
感谢您的帮助
答案 0 :(得分:3)
JSON
格式只是将键和值配对的一种好方法。
Keys
是我们给Values
赋予的名称,因此可以轻松访问它们。
如果我们使用您的JSON,并按键和值对它进行拆分,那么我们将得到:
键:"Bonjour", "English Word", "Type of word", "Defintion", "Use case example", "Additional information"
。
显示所有值有点复杂,所以我将解释:
“ Bonjour”的值是这样的:
{
"English Word": "Hello",
"Type of word": "whatever",
"Defintion": "Means good day",
"Use case example": "Bonjour igo",
"Additional information": "BRO"
}
“ Bonjour”的值中描述了所有其他值。
“英语单词”的值是“你好”,依此类推。
当您编写这样的行:currentword[search]['English Word', 'Definition', 'Use case example']
时,您是在告诉Python寻找一个名为('English Word', 'Definition', 'Use case example')
的键,显然它不存在。
您应该做的如下:
for definition in currentword[search]:
eng_word = definition['English Word']
print('English Word - {}'.format(eng_word))
请注意,definition
也包含所有其他字段,因此您可以选择任意一个。
答案 1 :(得分:2)
从您的问题来看,您似乎只想从现有字典中提取一些键/值对。
尝试如下:
data = {
"Bonjour": {
"English Word": "Hello",
"Type of word": "whatever",
"Definition": "Means good day",
"Use case example": "Bonjour igo",
"Additional information": "BRO"
}
}
currentword = data
search = "Bonjour"
result = dict((k, currentword[search][k]) for k in ['English Word', 'Definition', 'Use case example'])
for k,v in result.items():
print k + ":" + v
结果:
Definition:Means good day
English Word:Hello
Use case example:Bonjour igo
答案 2 :(得分:1)
此行:
currentword[search]['English Word', 'Definition', 'Use case example']
从内部字典中调用'English Word', 'Definition', 'Use case example'
作为元组键,字典中不存在它,这就是引发KeyError
的原因。
如果只需要英语单词,请改用此单词:
currentword[search]["English Word"]
假设search
为"Bonjour"
。
看起来您也在尝试从内部dict过滤掉特定键。在这种情况下,您可以执行以下操作:
d = {
"Bonjour": {
"English Word": "Hello",
"Type of word": "whatever",
"Defintion": "Means good day",
"Use case example": "Bonjour igo",
"Additional information": "BRO"
}
}
inner_dict = d['Bonjour']
keys = ["English Word", "Use case example", "Defintion"]
print({k: inner_dict[k] for k in keys})
# {'English Word': 'Hello', 'Use case example': 'Bonjour igo', 'Defintion': 'Means good day'}