python - 无法超越 JSON 文件中的第一个字典

标签 python json list dictionary

我正在尝试迭代 JSON 文件来搜索特定部分并打印出文件的该部分。但我的代码仅适用于文件中的第一个字典,任何过去的内容都会让我的代码打印出 JSON 文件的部分不存在。这是 JSON 文件:

[
{
    "Name": "Debian",
    "Version": "9",
    "Install": "apt",
    "Owner": "SPI",
    "Kernel": "4.9"
},
{
    "Name": "Ubuntu",
    "Version": "17.10",
    "Install": "apt",
    "Owner": "Canonical",
    "Kernel": "4.13"
},
{
    "Name": "Fedora",
    "Version": "26",
    "Install": "dnf",
    "Owner": "Red Hat",
    "Kernel": "4.13"
},
{
    "Name": "CentOS",
    "Version": "7",
    "Install": "yum",
    "Owner": "Red Hat",
    "Kernel": "3.10"
},
{
    "Name": "OpenSUSE",
    "Version": "42.3",
    "Install": "zypper",
    "Owner": "Novell",
    "Kernel": "4.4"
},
{
    "Name": "Arch Linux",
    "Version": "Rolling Release",
    "Install": "pacman",
    "Owner": "SPI",
    "Kernel": "4.13"
},
{
    "Name": "Gentoo",
    "Version": "Rolling Release",
    "Install": "emerge",
    "Owner": "Gentoo Foundation",
    "Kernel": "4.12"
}

]

这是我的代码:

import json

jsonfile = raw_input("Choose a json file: ")
type(jsonfile)

name = input("Type in the name: ")
type(name)

with open (jsonfile) as myfile:
   data = myfile.read()

obj = json.loads(data)

for i in obj:
  if i["Name"] == name:
     print(i["Version"])
     break
  else:
     print("Title not found")
     break

假设我输入名称“Debian”,我就可以得到版本号。但是,如果我输入“Fedora”,我会得到代码的“标题未找到”部分。这意味着该名称不在 JSON 文件中,但它确实存在。任何帮助,将不胜感激。

最佳答案

为了简单起见:

s = [
      {
        "Name": "Debian",
        "Version": "9",
        "Install": "apt",
        "Owner": "SPI",
        "Kernel": "4.9"
      },
      {
        "Name": "Ubuntu",
        "Version": "17.10",
        "Install": "apt",
        "Owner": "Canonical",
        "Kernel": "4.13"
      },
      {
        "Name": "Fedora",
        "Version": "26",
        "Install": "dnf",
        "Owner": "Red Hat",
        "Kernel": "4.13"
      },
      {
        "Name": "CentOS",
        "Version": "7",
        "Install": "yum",
        "Owner": "Red Hat",
        "Kernel": "3.10"
      },
      {
        "Name": "OpenSUSE",
        "Version": "42.3",
        "Install": "zypper",
        "Owner": "Novell",
        "Kernel": "4.4"
      },
      {
        "Name": "Arch Linux",
        "Version": "Rolling Release",
        "Install": "pacman",
        "Owner": "SPI",
        "Kernel": "4.13"
      },
      {
        "Name": "Gentoo",
        "Version": "Rolling Release",
        "Install": "emerge",
        "Owner": "Gentoo Foundation",
        "Kernel": "4.12"
      }
]

使用列表理解:

search = 'Fedora'

print([x['Version'] for x in s if x['Name'] == search])

输出:

['26']

说明:

search = 'Fedora'

for elem in s:                      # for each elem in the list
    if elem['Name'] == search:      # check if the Name is what you're looking for
        print(elem['Version'])      # print the Version if it is

输出:

26

关于python - 无法超越 JSON 文件中的第一个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55777640/

相关文章:

python - 如何在 PyMC3 中定义自定义先验

json - 带有 JSON 嵌套数据的树面板

c++ - c++中 vector 和列表的setter和getter

python - 一键创建字典列表列表

python - 通过 UDP 套接字发送文件

python - 检测 Python Pandas DataFrame 连续行中的错误数据

Python 在 futex 调用中挂起

json - 在 AWS Redshift 中查询 JSON 字符串

json - 使用 jq 展平 json 对象

python - 将列添加到包含其他列值列表的 pandas DataFrame