我以以下格式存储数据:
doc, err := xmlquery.Parse(strings.NewReader(s))
if err != nil {
panic(err)
}
for _, n := range xmlquery.Find(doc, "//GetPriceChangesForReseller/*") {
fmt.Printf("%s price: %s\n", n.Data, n.SelectElement("EndUserPrice").InnerText())
}
我想将其转换为:
name address id
person place A123
person2 place2 A345
person3 place3 A445;A456
person4 place4 A333
我正在尝试这样做:
name address id
person place A123
person2 place2 A345
person3 place3 A445
person3 place3 A456
person4 place4 A333
此代码产生的等同于:
combined_file_array = []
for index, row in enumerate(data):
if (';' not in row['id']):
combined_file_array.append(row)
else:
ids = row['id'].split(';')
for id in ids:
combined_file_array.append(row)
combined_file_array[-1]['id'] = id.strip()
这为什么不起作用?
答案 0 :(得分:0)
您要对同一个字典进行变异,因此最终要更改两行的ID。
这样做
combined_file_array[-1]['id'] = id.strip()
您不仅要更改combined_file_array[-1]['id']
,而且要更改combined_file_array[-2]['id']
,因为它们都指向同一个字典。
答案 1 :(得分:0)
通过在row
上的每次迭代中附加相同的字典ids
,并将id
键更新为相同的dict,您将覆盖id
键的值。以前的迭代。
您应该改为从row
追加字典的新副本。由于您要更新id
键,因此可以先pop
,然后使用通用拆包更新其值:
for id in row.pop('id').split(';'):
combined_file_array.append({**row, 'id': id})