再次。 我有这个:
[
[{'location': u'Austria', u'number': 33},
{'location': u'Albania', u'number': 29},
{'location': u'Afghanistan', u'number': 666}],
[{'location': u'Austria', u'items': 6},
{'location': u'Albania', u'items': 1},
{'location': u'Afghanistan'}, u'items': 0],
[{'location': u'Austria', u'loss': 1.0},
{'location': u'Albania', u'loss': 2.0},
{'location': u'Afghanistan', u'loss': 6.6}]
]
我试过像这样生成列表:
[
[u'Austria', 33, 6, 1.00],
[u'Albania', 29, 1, 2.00],
[u'Afghanistan', 666, 0, 6.60]
]
我已经试过了:
country = [i['location'] for i in data[0]]
number = [i['number'] for i in data[0]]
items = [i['items'] for i in data[1]]
loss = [i['loss'] for i in data[2]]
然后我压缩这个:
for i in range(0,len(country)):
l.append([name[i], number[i], items[i], loss[i]])
及其工作,但是: 1)它很丑(对我来说) 2) 它不是“一刀切”
在其他时间我可能只有:
[
[{'location': u'Austria', u'number': 33},
{'location': u'Albania', u'number': 29},
{'location': u'Afghanistan', u'number': 666}],
[{'location': u'Austria', u'loss': 1.0},
{'location': u'Albania', u'loss': 2.0},
{'location': u'Afghanistan', u'loss': 6.6}]
]
我的代码会失败(超出索引),其他时候我可能有更多的列表,等等。 这个怎么弄好?
请您参考如下方法:
首先,我将其调换以便所有澳大利亚都在一起:
data_t = zip(*data)
然后我将通过提取子字典中的第一个非'location' 键来累积行(因为这似乎是您要查找的字段)。
rows = []
for country_dat in data_t:
country = country_dat[0]['location']
row = [country]
rows.append(row)
for dct in country_dat:
key = next(k for k in dct if k != 'location')
row.append(dct[key])
