【问题标题】:Add tuple as value in a dictionary在字典中添加元组作为值
【发布时间】:2018-10-02 22:06:25
【问题描述】:

我有一个包含一些 xml 信息的元组列表,我想创建一个字典,以便更快地访问。需要指定一个 id 作为我在列表的每个元组的第一项中存储的键,并将所有剩余信息作为值,但不确定这是否在 python 上是可能的。

我实际上要生成列表的代码:

for node in root.findall('n:graph/n:node', ns):
        id = node.get('id')
        nodes.append((id, *(data.text for data in node if \
        (data.get('key') == keys[2] or data.get('key') == keys[3]))))

这让我得到以下输出:

节点 = [('id1', 'x', 'y'), ('id2', 'x', 'y') ... ]

我想要的是这样的:

节点 = {'id1' : ('x', 'y'), 'id2' : ('x', 'y') ... ]

这样我就可以使用 if id in nodes 来检查元素是否存在。谢谢。

【问题讨论】:

    标签: python list dictionary tuples key


    【解决方案1】:

    以nodes 开头,作为字典而不是列表。

    nodes = {}
    for node in root.findall('n:graph/n:node', ns):
            id = node.get('id')
            nodes[id] = tuple([data.text for data in node if \
            (data.get('key') == keys[2] or data.get('key') == keys[3])])
    

    【讨论】:

    • 非常感谢你,这就是我一直在寻找的东西,以前从未使用过字典,也不知道即使我想要的东西是可能的,而且在 python 中也是一个菜鸟。
    【解决方案2】:

    你可以使用dict comprehension:

    {x[0]: x[1:] for x in nodes}
    

    【讨论】:

      【解决方案3】:
      nodes = {}
      for node in root.findall('n:graph/n:node', ns):
          id = node.get('id')
          nodes[id] = (data.text for data in node if data.get('key') in [keys[2],keys[3]])
      

      只要保证 id 是唯一的,这将起作用,否则它们将覆盖旧数据。

      【讨论】:

      • 仅供参考,(data.text for data in node if data.get('key') in [keys[2],keys[3]]) 将在 Python 3 中生成 generator,因此您需要将其转换为 tuple
      猜你喜欢
      • 2018-04-22
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多