【问题标题】:I want to order keys values of a list of objects using python我想使用 python 对对象列表的键值进行排序
【发布时间】:2021-03-04 13:05:25
【问题描述】:

我需要一些帮助来更改此数组并使里面的对象具有相同的键顺序

"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
         }
      ]

【问题讨论】:

  • 您自己尝试过什么吗?这很简单,也很容易实现
  • 是的,我找到了,但我没有找到解决方案你能做并分享一个简单的解决方案吗?

标签: python arrays python-3.x object


【解决方案1】:

此答案仅适用于保留字典键顺序的 python 3.6+(并且所询问的问题只有具有相同 python 版本的解决方案)

提取具有给定顺序的键列表。然后按照这个顺序重建子字典

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

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

完整代码:

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}]

【讨论】:

  • TypeError: 列表索引必须是整数或切片,而不是 str
  • 不是我的数据,不。数据中有一个“行”键。在这种情况下["lines"] 访问可以被删除sdata = [{k:d[k] for k in model} for d in data]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多