【发布时间】:2019-08-11 23:08:24
【问题描述】:
我正在尝试通过将列表索引视为其键来转换 dict 中的所有列表。
示例输入:
{
"checksum": "c540fcd985bf88c87e48c2bfa1df5498",
"data": {
"sampleMetrics": {
"name": "DNA Library QC Metrics",
"passQualityControl": true,
"metrics": [{
"name": "CONTAMINATION_SCORE",
"value": 1302,
"LSL": 0,
"USL": 3106,
"UOM": "NA"
}]
}
}
}
预期输出:
{
"checksum": "c540fcd985bf88c87e48c2bfa1df5498",
"data": {
"sampleMetrics": {
"name": "DNA Library QC Metrics",
"passQualityControl": true,
"metrics": {
"0": {
"name": "CONTAMINATION_SCORE"
},
"1": {
"value": 1302
},
"2": {
"LSL": 0
},
"3": {
"USL": 3106
},
"4": {
"UOM": "NA"
}
}
}
}
}
试用:
def list_to_dict_by_index(lst):
print {str(k): str(v) for k, v in enumerate(lst)}
list_to_dict_by_index([ {"d1" : 1}, {"d2" : 2} ])
但这适用于简单列表。 如何对 dict 中的所有列表执行相同操作?
(无论字典中的列表在哪里。)
列表可能包含另一个列表:
例如: 样本输入2:
"metrics": [{
"name": ["CONTAMINATION_SCORE", "TOTAL_SCORE"],
"value": 1302,
"LSL": 0,
"USL": 3106,
"UOM": "NA"
}]
样本输出2:
"metrics" : {
"0": {
"name": {
"0": "CONTAMINATION_SCORE",
"1": "TOTAL_SCORE"
}
},
"1": {
"value": 1302
},
"2": {
"LSL": 0
},
"3": {
"USL": 3106
},
"4": {
"UOM": "NA"
}
}
【问题讨论】:
-
作为一个想法,我建议您查看“dict deep merge”问题和答案:stackoverflow.com/questions/20656135/… 看起来您需要更改几行才能获得所需的内容。如果有任何问题,我可以更详细地描述更改。
-
我不想合并字典。我只想通过将列表索引视为键来转换 dict 中的所有列表。
-
好的。那只是一个正确解决方案的想法。因此,如果您以该答案为基础,请添加
elif isinstance(value, list):并将您的代码放入其中,然后您将获得解决方案。我应该更详细地描述我的想法并使用更多代码示例吗? -
@FedorDikarev :我已经尝试过
isinstance(value, list)。但无法以预期的方式进入
标签: python python-3.x python-2.7 list dictionary