簡體   English   中英

蟒蛇。 通過分割字符串鍵對字典排序

[英]Python. Sort list of dicts by splitting string key

我有這樣的字典列表:

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,所以首先我必須按年排序,然后按year_counter在每年的組中排序。 最后,我希望有:

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'}]

實現這一目標的最佳方法是什么?

我認為思路應該是這個分裂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解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM