使用Python从JSON文件读取数据

时间:2014-02-16 09:48:49

标签: python json

我有这样的数据结构:

"37_7009": [
    {
        "viewport_dimensions": {"width": 1583, "height": 798}, 
        "mouse_position": {"y": 1147, "x": 841}, 
        "node_data_attrs": {"groupid": "id_FW13-e052-7009-08", "rankgroupid": "rank_37"}
    }
]

使用:

with gzip.GzipFile(args.file,'rb') as gzf:
    all_hovers = json.load(gzf)

如何读出node_data_attrs值?

for cords in all_hovers[userID]:
    x = cords["mouse_position"]["x"]
    y = cords["mouse_position"]["y"]
    viewport_x = cords["viewport_dimensions"]["width"]
    viewport_y = cords["viewport_dimensions"]["height"]
    data_attrs = cords["node_data_attrs"]["groupid"]

我得到以下追溯:

Traceback (most recent call last):
  File "opdracht2-3.py", line 86, in <module>
    main()
  File "opdracht2-3.py", line 66, in main
    print cords["node_data_attrs"]["groupid"]
KeyError: 'groupid'

这对于阅读数据不起作用......有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您的代码运行正常,只是某些数据显示没有groupid密钥。

使用.get()解决此问题:

for cords in all_hovers[userID]:
    x = cords["mouse_position"]["x"]
    y = cords["mouse_position"]["y"]
    viewport_x = cords["viewport_dimensions"]["width"]
    viewport_y = cords["viewport_dimensions"]["height"]
    data_attrs = cords["node_data_attrs"].get("groupid")

如果密钥丢失,这会将data_attrs设置为None。您可以通过将第二个参数传递给dict.get()来将其设置为其他默认值:

    data_attrs = cords["node_data_attrs"].get("groupid", 'default value')

答案 1 :(得分:0)

给定插入AVL树的以下数字序列,指示插入是否导致无旋转,向右旋转,向左旋转,向左旋转,向右旋转向右旋转。

  

9,8,7,6,2,3,4,5,11,1,12,23,24

如果没有完成轮换,则按级别顺序列出BST树: 根: L1: L2: ...

如果完成旋转,则按级别顺序列出AVL树: 对于工具栏,请按ALT+F10 (PC)ALT+FN+F10 (Mac)