重新排序列表,从中间附近拉出3个值并放在末尾

时间:2018-07-14 17:46:58

标签: python

这是我的列表列:

cols
Out[11]: 
['ga:date',
 'ga:hour',
 'ga:dimension1',
 'ga:dimension2',
 'ga:userType',
 'ga:landingpagePath',
 'ga:deviceCategory',
 'ga:sessions',
 'ga:goal1Completions',
 'ga:bounces',
 'ga:operatingSystem',
 'ga:source',
 'ga:medium',
 'ga:campaign',
 'ga:adContent',
 'ga:keyword']

我想对其重新排序,以使ga:sessions,ga:bounces和ga:goal1Completions位于结尾。

除了手动输入以外,我该如何先从cols的中间删除这些项目,然后在末尾附加这些项目?

所需结果:

cols
Out[11]: 
['ga:date',
 'ga:hour',
 'ga:dimension1',
 'ga:dimension2',
 'ga:userType',
 'ga:landingpagePath',
 'ga:deviceCategory',
 'ga:operatingSystem',
 'ga:source',
 'ga:medium',
 'ga:campaign',
 'ga:adContent',
 'ga:keyword',
 'ga:sessions',
 'ga:goal1Completions',
 'ga:bounces']

1 个答案:

答案 0 :(得分:0)

l = sorted(l, key=lambda v: 1 if v in ('ga:goal1Completions', 'ga:bounces', 'ga:operatingSystem') else 0)
print(l)

打印:

['ga:date', 'ga:hour', 'ga:dimension1', 'ga:dimension2', 'ga:userType', 'ga:landingpagePath', 'ga:deviceCategory', 'ga:sessions', 'ga:source', 'ga:medium', 'ga:campaign', 'ga:adContent', 'ga:keyword', 'ga:goal1Completions', 'ga:bounces', 'ga:operatingSystem']

或者使用权重,如果您想精确按顺序排列组:

weights = {'ga:sessions':1, 'ga:goal1Completions':2, 'ga:bounces':3}
l = sorted(l, key=lambda v: 0 if v not in weights else weights[v])
print(l)

输出:

['ga:date', 'ga:hour', 'ga:dimension1', 'ga:dimension2', 'ga:userType', 'ga:landingpagePath', 'ga:deviceCategory', 'ga:operatingSystem', 'ga:source', 'ga:medium', 'ga:campaign', 'ga:adContent', 'ga:keyword', 'ga:sessions', 'ga:goal1Completions', 'ga:bounces']