蟒蛇。通过拆分字符串键对dicts列表进行排序

时间:2017-11-23 11:42:44

标签: python python-3.x list sorting dictionary

我有一个像这样的词典列表:

my_list=[{'c': '1/2014'},
{'c': '1/2015'},
{'c': '10/2014'},
{'c': '2/2014'},
{'c': '3/2014'},
{'c': '1/2011'},
{'c': '2/2011'},
{'c': '3/2011'},
{'c': '6/2014'},
{'c': '5/2014'},
{'c': '10/2014'},
{'c': '2/2015'},
{'c': '4/2015'},
{'c': '3/2015'},
{'c': '5/2016'},
{'c': '1/2017'}]

我想通过c键订购我的清单。 关键有两个部分:year_counter / year,所以首先我必须按年份排序,然后按年份排序,每年都在内部。 最后我希望有这个:

my_list=[{'c': '1/2011'},
 {'c': '2/2011'},
 {'c': '3/2011'},
 {'c': '1/2014'},
 {'c': '2/2014'},
 {'c': '3/2014'},
 {'c': '5/2014'},
 {'c': '6/2014'},
 {'c': '10/2014'},
 {'c': '1/2015'},
 {'c': '2/2015'},
 {'c': '3/2015'},
 {'c': '4/2015'},
 {'c': '11/2015'},
 {'c': '5/2016'},
 {'c': '1/2017'}]

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为应该首先将此monthyear分开,然后应用一些排序算法对其进行排序。

您可以使用underscore库。注意我的fiddle

https://jsfiddle.net/stdeepak22/96trt0r4/1/

首先,我将c的值分为月和年。

var split_list = _.map(my_list, function(r){
    return {
      mn : parseInt(r.c.split('/')[0]),
      yr : parseInt(r.c.split('/')[1])
    };
  }); 

然后我应用排序然后再次加入实际字段c

var sorted_list= _.chain(split_list)
  .sortBy(function(f)
  {
    return f.mn;
  }).sortBy(function(f)
  {
    return f.yr;
  }).map(function(obj)
  {
    return { c: obj.mn+'/'+obj.yr }
  }).value();

然后我在控制台上打印以检查输出。

console.log(sorted_list);

最初我忘了将月份和年份值解析为int。我现在已经纠正过了。

<强>更新 最初你没有标记,Python我认为你正在寻找json,所以我提供了JavaScript解决方案。