【问题标题】:Reading and manipulating JSON elements on Python在 Python 上读取和操作 JSON 元素
【发布时间】:2019-02-18 22:15:45
【问题描述】:

我是 python 新手,我需要读取和操作 json 文件中的元素,但我不断收到错误,我不知道如何前进。这是我的代码:

import json 
with open('file.txt', 'r') as json_data:
    d = json.load(json_data)

数据集示例:

[
    {
        'id': 1,
        'name': 'a',
        'city': 'Paris'
    },
    {
        'id': 2,
        'name': 'b',
        'city': 'Mons'
    },
    {
        'id': 3,
        'name': 'c.',
        'city': 'Leuven'
    }
]

当我尝试仅获取 idname 时,我收到此错误:

city = d['city']

TypeError Traceback(最近一次调用最后一次)

在 ()

----> 1 个城市 = d['city']

TypeError: 列表索引必须是整数或切片,而不是 str

然后我尝试了这个:

city = d[:]['city']

TypeError Traceback(最近一次调用最后一次)

在 () ----> 1 个城市 = d[:]['city']

TypeError: 列表索引必须是整数或切片,而不是 str

有什么想法吗?谢谢!

【问题讨论】:

  • city = d[0]['city'] 怎么样?尝试循环
  • 这是一个列表,因此 Arvind 指出您应该尝试将列表索引放在字典键之前。

标签: python json list


【解决方案1】:

你可以编写一个循环来遍历每个对象

final=[]
for obj in d:
    final.append(obj['city'])

或者你可以试试这个

final = [obj['city'] for obj in d]

或者如果你只需要第一个值,那么

print(d[0]['city'])

输出

'巴黎'

由于您的数据是字典列表,因此您必须使用索引值来获取字典中的数据

【讨论】:

  • 哈里,非常感谢您的回答。还有一件事,如何将此输出保存到另一个列表?再次感谢您的时间和耐心:)
  • 我已经添加了将城市附加到列表的代码
  • 谢谢 Hari,我以前试过,我以为我写错了。我仍然遇到同样的错误。我真的不明白:(TypeError: list indices must be integers or slices, not str
  • 我添加了另一种获取值列表的方法。请尝试一下
  • 我得到一个空列表作为输出[]。有没有办法将列表作为字符串获取?
【解决方案2】:

由于这是列表中的字典,因此您必须在通过键调用 value 之前提供列表索引。这应该有效:

dict = d[0]
city = dict['city']

或者你可以简单地使用:

city = d[0]['city']

【讨论】:

    【解决方案3】:

    您很可能不想知道要查找的元素的数组索引。

    使用一些 Python 风格,您可以使用 list comprehension 创建 tuples,如下所示:

    arr = [(dict['id'], dict['city']) for dict in d]
    

    输出将是

    [(1, 'Paris'),
    (2, 'Mons'),
    (3, 'Leuven')]
    

    然后,如果需要,您可以只获取元组中的特定项目。

    例如:

    arr = [(dict['id'], dict['city']) for dict in d if 's' in dict['city']]
    

    对于 city 属性中包含“s”的每个条目,将返回 idname

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多