我试图在dict中转换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"
}
}
第二个示例输入/输出包含与问题标题一致的组件,即将列表转换为以列表索引为键的字典:
但是,两个示例输入/输出都包含字典列表,这些字典将以不同的方式转换,即转换为字典字典,其中键作为字典条目的可枚举索引。你知道吗
这是许多试图表达以下两种情况的词语:
{[{'foo': 'bar'}]} => {'0': {'foo': 'bar'}}
{'foo': ['bar']} => {'foo': {'0': 'bar'}}
这可能是你失败的根源。此外,您的解决方案尝试只会在字典的最顶层进行迭代。如果您想影响任意级别的条目,即您需要以下形式的内容,则必须递归遍历字典:
如果您使用的是Python2而不是Python3,请使用iteritems而不是items。此外,复制是必要的,这样迭代器就不会在字典发生变化时失效。你知道吗
您可以在枚举循环中工作,就像您最初用来获得工作解决方案一样。小心添加递归调用以影响字典的所有级别。总的来说,这可能类似于以下内容:
这假设字典列表大小写总是包含一个字典。不清楚你在其他情况下会期望什么。你知道吗
你要问的很清楚,但是你的第一个例子不符合规则“通过将列表索引作为键将dict中的所有列表转换为dict”。
metrics
键被映射到一个包含一个元素的列表,该元素是一个字典:[{...}]
。因此,您的预期输出是:如果这是您想要的,您只需使用DFS:
清单被字典取代了。处理字典的值。你知道吗
编辑:
sample1
是您的第一个样本输入,sample2
几乎相同:"name": ["CONTAMINATION_SCORE", "TOTAL_SCORE"]
替换"name": "CONTAMINATION_SCORE"
相关问题 更多 >
编程相关推荐