Skip to main content
 首页 » 编程设计

Python快速排列列表的技巧

2025年05月04日15lovecherry

再次。 我有这个:

[ 
 [{'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])