【问题标题】:How can I get the specific element in a json-like element in python?如何在 python 中获取类 json 元素中的特定元素?
【发布时间】:2019-08-26 13:14:39
【问题描述】:

我有一个包含一些开放街道地图节点的 XML 文件。我正在尝试随机选择一个节点。为此,我首先将所有节点的 id 放入一个数组中,然后随机选择一个 id。然后我希望获得具有该 ID 号的节点。

现在,我读取 xml 文件并执行以下操作:

tree = ET.parse('/Users/XXX/Documents/map.osm.xml')
root = tree.getroot()

idd = [] # ids of the nodes

for n in root.iter('node'):
    idd.append( n.attrib["id"] )

循环中的每个n.attrib 都是这样的:

{'id': '6676298011', 'visible': 'true', 'version': '1', 'changeset': '72944617', 'timestamp': '2019-08-02T14:49:11Z', 'user': 'bkrc', 'uid': '8150490', 'lat': '41.0836908', 'lon': '29.0511424'}

如何获取 id 为 6677592585 的那个?

# whole code :


import xml.etree.ElementTree as ET
import random
import json

tree = ET.parse('/Users/XXX/Documents/map.osm.xml')
root = tree.getroot()

idd = []
for n in root.iter('node'):
    idd.append( n.attrib["id"] )

i = idd[0]

print(i)

【问题讨论】:

  • if '6677592585' == n.attrib["id"]: 然后附加它或获取任何你想要的。
  • 我有列表 idd,节点的 ids。我完成了循环来拥有它。然后我将从该列表中获得一个随机值。你认为我应该做另一个循环来找到它吗?我认为有一种更简单的方法。
  • 我个人不会再循环,它不允许可扩展性。但我不知道你对这段代码有什么打算。

标签: python json xml elementtree


【解决方案1】:

也许这不是您想要的,但我会利用您已经在遍历所有节点以获取它们的 ID 的事实。

假设id 对于每个节点都是唯一的,在制作 id 列表时,我会创建一个新的 dict,其中给定的 id 是节点的键。因此,当您随机选择您的 id 时,您可以使用它来将节点从新字典中取出。如果您有内存限制,这可能不是一个好的解决方案,但我能想到的唯一其他解决方案是每次您想要获取一个节点时循环遍历原始结构,直到您在给定节点中找到选定的 id,这将是CPU 密集型。也许它看起来像这样

idd = [] # ids of the nodes
mapped_nodes = {}

for n in root.iter('node'):
    idd.append( n.attrib["id"] )
    mapped_nodes[n.attrib["id"]] = n

如果你只需要n.attrib,你也可以把它放在你的mapped_nodes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多