寻找json键以在python中使用括号将其内容打印出来

时间:2019-01-19 09:11:32

标签: python json

我是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”

感谢您的帮助

3 个答案:

答案 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'}