【问题标题】:find value from json output从 json 输出中查找值
【发布时间】:2017-12-23 13:53:48
【问题描述】:

我有以下来自 url 的 api 输出。 我需要这些中所有“区域”的特定值,但我无法获取它。 你能建议我在这里需要改变什么吗?

dict =[ { "Fabric": "Madgth", "Zones": "rqu_kan23_34334_6666_56713", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:65:36:e4:20:ea" }, { "Fabric": "Madgth", "Zones": "rqu_kan23_C9AE9F10_6666_ytr9", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:69:36:e4:20:ea" }, { "Fabric": "Madgth", "Zones": "sdgh_5672_kan23_asd0", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:62:46:e0:70:bc" }, { "Fabric": "Madgth", "Zones": "fdsf_ytr2_kan23_dsd1", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:6a:46:e0:70:t5" }, { "Fabric": "Madgth", "Zones": "asdasd_5673_kan21_sdg0", "Members": "00:00:00:00:c9:ae:9f:14 40:00:01:63:47:60:04:b2" }, { "Fabric": "Madgth", "Zones": "FGF546_ytr3_kan21_SHQ1", "Members": "00:00:00:00:c9:ae:9f:14 40:00:01:6b:47:60:04:b2" }, { "Fabric": "sdfsdf", "Zones": "rqu_kan23_C9AE9F11_6666_5678", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:60:36:e4:20:ea" }, { "Fabric": "sdfsdf", "Zones": "rqu_kan23_C9AE9F11_6666_ytr12", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:6c:36:e4:20:ea" }, { "Fabric": "sdfsdf", "Zones": "FGF1166_5673_kan23_SHQ0", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:63:46:e0:70:bc" }, { "Fabric": "sdfsdf", "Zones": "FGF1166_ytr3_kan23_SHQ1", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:6b:46:e0:70:bc" }, { "Fabric": "sdfsdf", "Zones": "FGF546_5670_kan21_SHQ0", "Members": "00:00:00:00:c9:ae:9f:15 40:00:01:60:47:60:04:b2" }, { "Fabric": "sdfsdf", "Zones": "FGF546_ytr0_kan21_SHQ1", "Members": "00:00:00:00:c9:ae:9f:15 00:00:00:00:47:60:04:b2" } ]
print dict['Zones']

我似乎遇到了以下错误。

文件“test.py”,第 3 行,在 print dict['Zones'] TypeError: tuple indices must be integers, not str

【问题讨论】:

  • 使用列表理解 [i['Zones'] for i in di] 并且不要使用 dict 使用其他名称作为变量名,dict 是内置的。您提供了一个列表,想知道您是如何获得元组索引的。
  • 该代码不会产生该错误。相反,它会产生语法错误。因为你有几个语法错误。

标签: python arrays json


【解决方案1】:

您给出的dict在声明中有一些错误,这是已修复的:

dict =[ { "Fabric": "Madgth", "Zones": "rqu_kan23_34334_6666_56713", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:65:36:e4:20:ea" }, { "Fabric": "Madgth", "Zones": "rqu_kan23_C9AE9F10_6666_ytr9", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:69:36:e4:20:ea" }, { "Fabric": "Madgth", "Zones": "sdgh_5672_kan23_asd0", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:62:46:e0:70:bc" }, { "Fabric": "Madgth", "Zones": "fdsf_ytr2_kan23_dsd1", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:6a:46:e0:70:t5" }, { "Fabric": "Madgth", "Zones": "asdasd_5673_kan21_sdg0", "Members": "00:00:00:00:c9:ae:9f:14 40:00:01:63:47:60:04:b2" }, { "Fabric": "Madgth", "Zones": "FGF546_ytr3_kan21_SHQ1", "Members": "00:00:00:00:c9:ae:9f:14 40:00:01:6b:47:60:04:b2" }, { "Fabric": "sdfsdf", "zones": "rqu_kan23_C9AE9F11_6666_5678", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:60:36:e4:20:ea" }, { "Fabric": "sdfsdf", "Zones": "rqu_kan23_C9AE9F11_6666_ytr12", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:6c:36:e4:20:ea" }, { "Fabric": "sdfsdf", "Zones": "FGF1166_5673_kan23_SHQ0", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:63:46:e0:70:bc" }, { "Fabric": "sdfsdf", "Zones": "FGF1166_ytr3_kan23_SHQ1", "Members": "00:00:00:00:c9:ae:9f:11 40:00:01:6b:46:e0:70:bc" }, { "Fabric": "sdfsdf", "Zones": "FGF546_5670_kan21_SHQ0", "Members": "00:00:00:00:c9:ae:9f:15 40:00:01:60:47:60:04:b2" }, { "Fabric": "sdfsdf", "Zones": "FGF546_ytr0_kan21_SHQ1", "Members": "00:00:00:00:c9:ae:9f:15 00:00:00:00:47:60:04:b2" } ]

现在这样一个简单的代码就可以了:

list = []
for i in dict:
    list.append(i["Zones"])

【讨论】:

    【解决方案2】:

    您可以简单地循环列表并打印它。

    for item in dict:
        print item['Zones']
    

    虽然不建议使用dict 作为变量名;)

    【讨论】:

      【解决方案3】:

      这里只是列表,你必须喜欢。

      dict[0]['Zones']
      

      您的样本和错误消息不匹配。作为字典列表和错误消息给出的示例对应于一个元组。

      要获取所有"Zones",请使用

      zones = [i['Zones'] for i in dict if 'Zones' in i]
      

      请不要使用dict 作为变量名。

      为了在 cmets 中进行澄清,

      In [16]: dict =[ { "Fabric": "Madgth", "Zones": "rqu_kan23_34334_6666_56713", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:65:36:e4:20:ea" }, {
          ...:  "Fabric": "Madgth", "Zones": "rqu_kan23_C9AE9F10_6666_ytr9", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:69:36:e4:20:ea" }, { "Fabri
          ...: c": "Madgth", "Zones": "sdgh_5672_kan23_asd0", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:62:46:e0:70:bc" }, { "Fabric": "Madgth", "
          ...: Zones": "fdsf_ytr2_kan23_dsd1", "Members": "00:00:00:00:c9:ae:9f:10 40:00:01:6a:46:e0:70:t5" }, { "Fabric": "Madgth", "Zones": "asdasd
          ...: _5673_kan21_sdg0", "Members": "00:00:00:00:c9:ae:9f:14 40:00:01:63:47:60:04:b2" }, { "Fabric": "Madgth", "Zones": "FGF546_ytr3_kan21_S
          ...: HQ1", "Members": "00:00:00:00:c9:ae:9f:14 40:00:01:6b:47:60:04:b2" }, { "Fabric": "sdfsdf", "zones": "rqu_kan23_C9AE9F11_6666_5678", "
          ...: Members": "00:00:00:00:c9:ae:9f:11 40:00:01:60:36:e4:20:ea" }, { "Fabric": "sdfsdf", "Zones": "rqu_kan23_C9AE9F11_6666_ytr12", "Member
          ...: s": "00:00:00:00:c9:ae:9f:11 40:00:01:6c:36:e4:20:ea" }, { "Fabric": "sdfsdf", "Zones": "FGF1166_5673_kan23_SHQ0", "Members": "00:00:0
          ...: 0:00:c9:ae:9f:11 40:00:01:63:46:e0:70:bc" }, { "Fabric": "sdfsdf", "Zones": "FGF1166_ytr3_kan23_SHQ1", "Members": "00:00:00:00:c9:ae:9
          ...: f:11 40:00:01:6b:46:e0:70:bc" }, { "Fabric": "sdfsdf", "Zones": "FGF546_5670_kan21_SHQ0", "Members": "00:00:00:00:c9:ae:9f:15 40:00:01
          ...: :60:47:60:04:b2" }, { "Fabric": "sdfsdf", "Zones": "FGF546_ytr0_kan21_SHQ1", "Members": "00:00:00:00:c9:ae:9f:15 00:00:00:00:47:60:04:
          ...: b2" } ]
      
      In [17]: print dict['Zones']
      ---------------------------------------------------------------------------
      TypeError                                 Traceback (most recent call last)
      <ipython-input-17-cccdb30efad8> in <module>()
      ----> 1 print dict['Zones']
      
      TypeError: list indices must be integers, not str
      

      【讨论】:

      • @StefanPochmann 错误仅与元组相关。请检查它的列表只知道的变量。
      • 注意问题中的dict。这是字典列表。
      • 他得到的是TypeError: tuple indices 而不是TypeError: list indices
      • 该代码示例只能产生TypeError: list indices。可能是错误地粘贴了样本。它可能是一个像 dict = ({...},{...},) 这样的元组。
      • 我稍微修正了 dict,现在我没有得到你们正在争论的任何错误?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多