【问题标题】:Extract vale of a key for a given key value pair in a list of dict in python在python中的dict列表中提取给定键值对的键值
【发布时间】:2020-01-28 14:47:52
【问题描述】:

我有一个字典列表,看起来像。

[
  {
    "deviceId": "d61e",
    "floor": "L1",
    "id": "l1-topic"
  },
  {
    "deviceId": "fd00::212:4b00:1957:d197",
    "floor": "L3",
    "id": "l3-topic"
  },
  {
    "deviceId": "fd00::212:4b00:1957:d1a3",
    "floor": "L2",
    "id": "l2-topic"
  }
]

somone 可以帮助我如何提取给定楼层(如 L2)的 deviceId 吗?

我已经尝试将其转换为 pandas 数据框并尝试使用一些操作进行提取,是否可以以更 Python 的方式进行。

谢谢。

【问题讨论】:

标签: python json list dictionary


【解决方案1】:

与@Jiri Otuupal 中的逻辑相同,但使用列表理解以更紧凑的形式:

# I assume the given list is stored in a variable called "dicts"
res = [d['deviceId'] for d in dicts if d['floor'] == 'L2']

输出

print(res)
# ['fd00::212:4b00:1957:d1a3'] 

据我所知,在将列表与循环和条件结合使用时,列表推导式是获得所需结果的最 Python 的方式。大多数情况下,它们比任何其他解决方案都更快、代码更短且更易于阅读。

【讨论】:

    【解决方案2】:

    当 floor 等于 L2 时,您可以迭代并获取 deviceId

    >>> res = next((d['deviceId'] for d in l if d['floor']=='L2'), None)
    >>> res
    'fd00::212:4b00:1957:d1a3'
    

    【讨论】:

    • 我知道l 是我的清单。在这种情况下下一步该怎么做?
    • l 是您的清单。 res 将从迭代器中获取下一项,如果没有字典有楼层 L2,则 res 将获取 None。
    【解决方案3】:

    如果我理解正确的问题,您想提取在地板上的 deviceId。你可以使用这个:

    result = []
    for key,data in devices.items():
        if data.floor=="L2":
           result.append(data.deviceId)
    
    Now the result contain, all ids in floor
    

    但您确实应该考虑以不同的方式存储楼层的 deviceId。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多