我不熟悉python程序,有人可以帮忙吗?非常感谢!
def ConvertInputFileJsonStr(InputCsvPath):
#### Detail Data ####
fo = open(InputCsvPath, "r")
ColumnValuesCSVColumns = (
'externalDataRef', 'language','mailingListLibraryId','surveyID')
reader = csv.DictReader(fo, ColumnValuesCSVColumns)
ls = []
for row in reader:
ls.append(row)
groups = []
uniquekeys = []
for k, g in groupby(ls, lambda r: (r['externalDataRef'],r['language'], r['surveyID'])):
groups.append({
"externalDataRef": k[0],
"language": k[1],
"surveyID": k[2],
"qualtricsDetails": [{k: v for k, v in d.items() if k not in ['externalDataRef','language','surveyID']} for d in list(g)]
})
uniquekeys.append(k)
return groups
fo.close()
它会回来
[
{
"externalDataRef": "535985",
"language": "EN",
"qualtricsDetails": [{
"mailingListLibraryId": "9011111111111"
}],
"surveyID": "123456789"
}
]
但我希望它转换为下面的示例。 我该怎么做?
[
{
"externalDataRef": "535985",
"language": "EN",
"qualtricsDetails": {
"mailingListLibraryId": "9011111111111"
},
"surveyID": "123456789"
}
]
您需要获取列表的第一项。 你可以这样做,但它会给出空结果list index out of range
错误。
"qualtricsDetails": [{k: v for k, v in d.items() if k not in ['externalDataRef','language','surveyID']} for d in list(g)][0]
看起来您只有以下 4 列:
'externalDataRef', 'language', 'mailingListLibraryId', 'surveyID'
因此,您可以通过更改以下行,使用更简单的语法轻松实现目标:
"qualtricsDetails": [{k: v for k, v in d.items() if k not in ['externalDataRef','language','surveyID']} for d in list(g)]
})
对此:
"qualtricsDetails": {"mailingListLibraryId": k[3]}
请让我知道这是否有帮助。