我想使用python对对象列表的键和值进行排序

2024-04-19 07:38:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些帮助来更改此数组并在其中创建具有相同键顺序的对象

"lines":[
     {
        "name":"n1",
        "salary_group_id":"Badr Office",
        "Basic Salary":5000.0,
        "**Unpaid Leave**":0.0,
        **"Other Allowances** ":0.0,
        "**Housing Allowance**":500.0,
        "Company Contribution For Employee":605.0,
        "Contribution For Employee":-495.0,
        "Gross":5500.0,
        "Loan":0.0,
        "Net Salary":5005.0
     },
     {
        "name":"n2",
        "salary_group_id":"Badr Office",
        "Basic Salary":6500.0,
        "**Housing Allowance**":500.0,
        "**Unpaid Leave**":0.0,
        "**Other Allowances** ":0.0,
        "Company Contribution For Employee":770.0,
        "Contribution For Employee":-630.0,
        "Gross":7000.0,
        "Loan":0.0,
        "Net Salary":6370.0
     }
  ]

我希望它变成:

"lines":[
         {
            "name":"n1",
            "salary_group_id":"Badr Office",
            "Basic Salary":5000.0,
            "Unpaid Leave":0.0,
            "Other Allowances ":0.0,
            "Housing Allowance":500.0,
            "Company Contribution For Employee":605.0,
            "Contribution For Employee":-495.0,
            "Gross":5500.0,
            "Loan":0.0,
            "Net Salary":5005.0
         },
         {
            "name":"n2",
            "salary_group_id":"Badr Office",
            "Basic Salary":6500.0,
            "Unpaid Leave":0.0,
            "Other Allowances":0.0,
            "Housing Allowance":500.0,
            "Company Contribution For Employee":770.0,
            "Contribution For Employee":-630.0,
            "Gross":7000.0,
            "Loan":0.0,
            "Net Salary":6370.0
         }
      ]

Tags: nameidforbasicgroupemployeeotheroffice
1条回答
网友
1楼 · 发布于 2024-04-19 07:38:25

这个答案仅适用于python 3.6+,其中保留了字典键顺序(并且所问的问题只有相同python版本的解决方案)

按给定顺序提取密钥列表。然后按照以下顺序重新生成子字典

sdata = [{k:d[k] for k in model} for d in data["lines"]]

在列表理解中重建的字典遵循任何python版本上model键列表的顺序>;=3.6

完整代码:

data = {"lines":[
     {
        "name":"n1",
        "salary_group_id":"Badr Office",
        "Basic Salary":5000.0,
        "Unpaid Leave":0.0,
        "Other Allowances":0.0,
        "Housing Allowance":500.0,
        "Company Contribution For Employee":605.0,
        "Contribution For Employee":-495.0,
        "Gross":5500.0,
        "Loan":0.0,
        "Net Salary":5005.0
     },
     {
        "name":"n2",
        "salary_group_id":"Badr Office",
        "Basic Salary":6500.0,
        "Housing Allowance":500.0,
        "Unpaid Leave":0.0,
        "Other Allowances":0.0,
        "Company Contribution For Employee":770.0,
        "Contribution For Employee":-630.0,
        "Gross":7000.0,
        "Loan":0.0,
        "Net Salary":6370.0
     }
  ]}

model = list({
            "name":"n1",
            "salary_group_id":"Badr Office",
            "Basic Salary":5000.0,
            "Unpaid Leave":0.0,
            "Other Allowances":0.0,
            "Housing Allowance":500.0,
            "Company Contribution For Employee":605.0,
            "Contribution For Employee":-495.0,
            "Gross":5500.0,
            "Loan":0.0,
            "Net Salary":5005.0
         })


sdata = [{k:d[k] for k in model} for d in data["lines"]]

>>> sdata
[{'name': 'n1', 'salary_group_id': 'Badr Office', 'Basic Salary': 5000.0, 'Unpaid Leave': 0.0, 'Other Allowances': 0.0, 'Housing Allowance': 500.0, 'Company Contribution For Employee': 605.0, 'Contribution For Employee': -495.0, 'Gross': 5500.0, 'Loan': 0.0, 'Net Salary': 5005.0},
{'name': 'n2', 'salary_group_id': 'Badr Office', 'Basic Salary': 6500.0, 'Unpaid Leave': 0.0, 'Other Allowances': 0.0, 'Housing Allowance': 500.0, 'Company Contribution For Employee': 770.0, 'Contribution For Employee': -630.0, 'Gross': 7000.0, 'Loan': 0.0, 'Net Salary': 6370.0}]

相关问题 更多 >