【问题标题】:Get value from multiple dictionaries with same key从具有相同键的多个字典中获取值
【发布时间】:2021-03-18 10:56:50
【问题描述】:

我想从下面给定的代码中获取 Name 的值和 Salary 的值。

    {
        "records": [
            {
                "fieldName": "Name",
                "value": "Alex"
            },
            {
                "fieldName": "Age",
                "value": "22"
            },
            {
                "fieldName": "Salary",
                "value": "235000.0"
            },
            {
                "fieldName": "Entry.Date",
                "value": "Sat Jan 02 00:00:00 GMT 2021"
            }]
        }

【问题讨论】:

标签: python python-3.x list dictionary


【解决方案1】:

首先解析整个事情:

out = {o['fieldName']: o['value'] for o in obj['records']}                                                                                                                                                                                 

输出:

{'Name': 'Alex',
 'Age': '22',
 'Salary': '235000.0',
 'Entry.Date': 'Sat Jan 02 00:00:00 GMT 2021'}

然后抓住你想要的:

name, salary = out['Name'], out['Salary']                                                                                           

【讨论】:

  • 谢谢@fsl。我发现这是最好的方法。非常感谢。
【解决方案2】:

我建议使用简单的基于for 循环的方法,因为列表理解需要对列表进行多次迭代:

data = {
        "records": [
            {
                "fieldName": "Name",
                "value": "Alex"
            },
            {
                "fieldName": "Age",
                "value": "22"
            },
            {
                "fieldName": "Salary",
                "value": "235000.0"
            },
            {
                "fieldName": "Entry.Date",
                "value": "Sat Jan 02 00:00:00 GMT 2021"
            }]
        }


name, salary = None, None
for record in data["records"]:
    if record.get("fieldName") == "Name":
        name = record.get("value")
    
    if record.get("fieldName") == "Salary":
        salary = record.get("value")
    
print(name, salary)

输出:

Alex 235000.0

【讨论】:

    【解决方案3】:

    这假设字段恰好出现一次。如果不是,请删除冒号以获取包含所有值的列表。

    
    name, = [d['value'] for d in your_dictionary['records'] if d['fieldName']=='Name']
    salary, = [d['value'] for d in your_dictionary['records'] if d['fieldName']=='Salary']
    
    

    【讨论】:

      【解决方案4】:

      使用简单的理解方法

      dct = {
              "records": [
                  {
                      "fieldName": "Name",
                      "value": "Alex"
                  },
                  {
                      "fieldName": "Age",
                      "value": "22"
                  },
                  {
                      "fieldName": "Salary",
                      "value": "235000.0"
                  },
                  {
                      "fieldName": "Entry.Date",
                      "value": "Sat Jan 02 00:00:00 GMT 2021"
                  }]
          }
      data = {name : salary for (name, salary) in zip([d['value'] for d in dct['records'] if d['fieldName'] == 'Name'], [d['value'] for d in dct['records'] if d['fieldName'] == 'Salary'])}
      print(data)
      

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 2019-05-11
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多