Я хочу сгладить дикт. Словарь может содержать списки. Таким образом, при выравнивании списков внутри словаря он должен учитывать индекс списка в качестве своего ключа.
Как я могу сделать то же самое?
Я старался:
def flatten(d, parent_key='', sep='__'):
items = []
for k, v in d.items():
new_key = parent_key + sep + k if parent_key else k
if isinstance(v, collections.MutableMapping):
items.extend(flatten(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
Это выравнивание dict, но игнорирование списков.
Я также пытался добавить if isinstance(v, list):
, но не понимаю, как append
/ extend
в items
.
data = {
"checksum": "c540fcd985bf88c87e48c2bfa1df5498",
"data": {
"sampleMetrics": {
"name": "DNA Library QC Metrics",
"passQualityControl": "true",
"metrics": [{
"name": "CONTAMINATION_SCORE",
"value": 1302,
"LSL": 0,
"USL": 3106,
"UOM": "NA"
}]
}
}
}
print flatten(data)
Вывод, который я получаю:
{
'checksum': 'c540fcd985bf88c87e48c2bfa1df5498',
'data__sampleMetrics__metrics': [{
'LSL': 0,
'USL': 3106,
'name': 'CONTAMINATION_SCORE',
'value': 1302,
'UOM': 'NA'
},{ 'demo': 11}],
'data__sampleMetrics__name': 'DNA Library QC Metrics',
'data__sampleMetrics__passQualityControl': 'true'
}
Что сглаживает другие вещи, кроме элементов списка.
Ожидаемый результат: он также должен сгладить список (с учетом индекса списка в качестве ключа).
{
'checksum': 'c540fcd985bf88c87e48c2bfa1df5498',
'data__sampleMetrics__metrics__0__LSL': 0,
'data__sampleMetrics__metrics__0__USL': 3106,
'data__sampleMetrics__metrics__0__name': 'CONTAMINATION_SCORE',
'data__sampleMetrics__metrics__0__value': 1302,
'data__sampleMetrics__metrics__0__UOM': 'NA',
'data__sampleMetrics__metrics__1__demo': 11,
'data__sampleMetrics__name': 'DNA Library QC Metrics',
'data__sampleMetrics__passQualityControl': 'true'
}
Как сгладить список, содержащий словарь, рассматривая его индекс как ключ?
0__LSL
,0__USL
,0__name
и т. д., поскольку этот вложенный словарь является 0-м элементом списка? - person muru   schedule 22.03.2019"metrics"
более одного словаря? - person martineau   schedule 22.03.2019