Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python快速排列列表的技巧_Python_Django - Fatal编程技术网

Python快速排列列表的技巧

Python快速排列列表的技巧,python,django,Python,Django,再说一遍。 我有这个: [ [{'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':

再说一遍。 我有这个:

[
 [{'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)
然后,我将通过拔出sub dict中的第一个非
'location'
键来累加行(因为这似乎是您要查找的字段)


首先,我将其转换为所有澳大利亚国家:

data_t = zip(*data)
然后,我将通过拔出sub dict中的第一个非
'location'
键来累加行(因为这似乎是您要查找的字段)

这个怎么样

from collections import OrderedDict

od=OrderedDict()
for dl in data:
  for d in dl:    
    loc = d['location']
    od.setdefault(loc,{}).update(**d)

for k in od: print od[k]

{u'loss': 1.0, 'location': u'Austria', u'number': 33}
{u'loss': 2.0, 'location': u'Albania', u'number': 29} 
{u'loss': 6.6, 'location': u'Afghanistan', u'number': 666}
它将把任何一组目录键累积到一个目录中,并保留位置的原始顺序

如果您想要一个列表列表,其中包含按任何顺序排列的任何字段,请从此处开始:

fields=['location', 'loss', 'number'] 
lofl = [[ oo[k][x] for x in fields] for k in oo ]

>>> lofl
[[u'Austria', 1.0, 33], [u'Albania', 2.0, 29], [u'Afghanistan', 6.6, 666]]
这个怎么样

from collections import OrderedDict

od=OrderedDict()
for dl in data:
  for d in dl:    
    loc = d['location']
    od.setdefault(loc,{}).update(**d)

for k in od: print od[k]

{u'loss': 1.0, 'location': u'Austria', u'number': 33}
{u'loss': 2.0, 'location': u'Albania', u'number': 29} 
{u'loss': 6.6, 'location': u'Afghanistan', u'number': 666}
它将把任何一组目录键累积到一个目录中,并保留位置的原始顺序

如果您想要一个列表列表,其中包含按任何顺序排列的任何字段,请从此处开始:

fields=['location', 'loss', 'number'] 
lofl = [[ oo[k][x] for x in fields] for k in oo ]

>>> lofl
[[u'Austria', 1.0, 33], [u'Albania', 2.0, 29], [u'Afghanistan', 6.6, 666]]

太好了,回答!我只是想知道为什么在那里有
行=[]
?看起来你不需要它。@JoeR--我需要把行放在周围,这样我就可以在前进的过程中附加每一行(参见第二段代码中的第5行)。哦,是的,我的错!谢谢。太好了,回答!我只是想知道为什么在那里有
行=[]
?看起来你不需要它。@JoeR--我需要把行放在周围,这样我就可以在前进的过程中附加每一行(参见第二段代码中的第5行)。哦,是的,我的错!谢谢