【问题标题】:Python: Getting value in dictionary by key and creating an array with themPython:按键获取字典中的值并用它们创建一个数组
【发布时间】:2021-12-27 00:44:00
【问题描述】:

我有一本这样的字典:

{
  "0": {}, 
  "1": {}, 
  "2": {}, 
  "3": {}, 
  "4": {}, 
  "5": {}, 
  "6": {}, 
  "7": {}, 
  "8": {}, 
  "9": {}, 
  "10": {}, 
  "11": {}, 
  "12": {
    "PNR": "51313542"
  }, 
  "13": {}, 
  "14": {}, 
  "15": {
    "PNR": "13151351351"
  }, 
  "16": {
    "PNR": "13151351351"
  }, 
  "17": {
    "PNR": "13151351351"
  }, 
  "18": {
    "PNR": "13151351351"
  }, 
  "19": {
    "PNR": "13151351351"
  }, 
  "20": {
    "PNR": "13151351351"
  }, 
  "21": {
    "PNR": "13151351351"
  }, 
  "22": {
    "PNR": "13151351351"
  }, 
  "23": {
    "PNR": "13151351351"
  }, 
  "24": {
    "PNR": "13151351351"
  }
}

我只想获取 PNR 并用它们创建一个数组。

我尝试使用此方法获取 PNR 值(将“输出”视为我的字典):

d_ = output.get("PNR")

但它没有给出。

无论我的 dict 中有多少元素,我如何获取 PNR 值并用它们创建一个数组?

【问题讨论】:

  • 如果特定子字典中没有PNR 键会怎样?
  • 你的意思是列表吗?

标签: python arrays dictionary


【解决方案1】:

您可以使用列表推导:

[v["PNR"] for v in dic.values() if "PNR" in v.keys()]

输出:

['51313542', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351']

【讨论】:

    【解决方案2】:

    如果PNRs 不在同一级别,您可以使用递归方法:

    def get_pnr(dct):
        pnrs = []
        for k, v in dct.items():
            if k == 'PNR':
                pnrs += [v]
            if isinstance(v, dict):
                pnrs.extend(get_pnr(v))
                
        return pnrs
    
    a = get_pnr(d)
    print(a)
    

    输出

    ['51313542', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351', '13151351351']
    

    【讨论】:

    • pnrs += [v] 应该是pnrs.append(v)...
    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2021-04-13
    • 2021-03-04
    • 1970-01-01
    • 2014-06-11
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多