對于輸入 Json,
[{
"ID": "00300000-0000-0000-0000-000000000000",
"CommonTags": [
"Sports"
],
"subID": "149f43d0-6fa9-44f3-b4ba-6fb7a320d0a4",
"Description": "Sports,Arts",
"Title": "Biodata",
"index": 1,
"Value": "Availabity"
},
{
"ID": "00400000-0000-0000-0000-000000000000",
"CommonTags": [
"Social Media"
],
"subID": "149f43d0-6fa9-44f3-b4ba-6fb7a320d0a4",
"Description": "Sports,Arts",
"Title": "Biodata",
"index": 5,
"Value": "Availabity"
},
{
"ID": "07300000-0000-0000-0000-000000000079",
"CommonTags": [
"Sports"
],
"subID": "149f43d0-6fa9-44f3-b4ba-6fb7a320d0a4",
"Description": "Environmental Science",
"Title": "Biodata",
"index": 1,
"Value": "Performace"
}
]
我只想要一些必要的欄位,例如 ID、CommonTags、Value。我的方法是利用 for 回圈并獲取和存盤必要的值。
有沒有可能像我們在 ASP.net 中使用的模型并在 python 中只獲取必要的值。
我對python語言比較陌生。請建議是否有使用 for 回圈的替代方法。
期望的輸出:
[
{
"ID": "00300000-0000-0000-0000-000000000000",
"CommonTags": "Sports",
"Value": "Availability"
},
{
"ID": "00400000-0000-0000-0000-000000000000",
"CommonTags": "Social Media",
"Value": "Availability"
},
{
"ID": "07300000-0000-0000-0000-000000000079",
"CommonTags": "Sports",
"Value": "Performance"
}
]
uj5u.com熱心網友回復:
glom允許您定義一個規范(模型)來執行此操作。
>>> from glom import glom
>>> spec = [ dict(ID='ID', CommonTags=('CommonTags', '0'), Value='Value') ]
結果:
>>> glom(target, spec)
[{'ID': '00300000-0000-0000-0000-000000000000',
'CommonTags': 'Sports',
'Value': 'Availability'},
{'ID': '00400000-0000-0000-0000-000000000000',
'CommonTags': 'Social Media',
'Value': 'Availability'},
{'ID': '07300000-0000-0000-0000-000000000079',
'CommonTags': 'Sports',
'Value': 'Performance'}]
uj5u.com熱心網友回復:
使用過濾必要欄位的字典推導迭代字典的串列推導似乎可以完成這項作業:
out = [{k: (v[0] if isinstance(v, list) and len(v)==1 else v) for k,v in d.items()
if k in ['ID','CommonTags','Value']} for d in lst]
輸出:
[{'ID': '00300000-0000-0000-0000-000000000000',
'CommonTags': 'Sports',
'Value': 'Availabity'},
{'ID': '00400000-0000-0000-0000-000000000000',
'CommonTags': 'Social Media',
'Value': 'Availabity'},
{'ID': '07300000-0000-0000-0000-000000000079',
'CommonTags': 'Sports',
'Value': 'Performace'}]
uj5u.com熱心網友回復:
靈活的解決方案,使用 adict將輸入 dict 的鍵直接映射到輸出 dict 或將 (lambda) 函式的結果分配給輸出 dict 的鍵:
from typing import Callable
def model_dict(d, mapping):
return {k: v(d) if isinstance(v, Callable) else d[v] for k, v in mapping.items()}
mapping = {
"ID": "ID",
"CommonTags": lambda x: x["CommonTags"][0],
"Value": "Value"
}
result = [model_dict(d, mapping) for d in lst]
model_dict如果在 lambda 函式內部呼叫,甚至可以使用嵌套字典。Callable可以使用任何物件來代替 lambda 函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425618.html
標籤:Python json python-3.x 列表 字典
