javascript と perl のそれぞれで、sort関数による並び替え - end0tknr's kipple - web写経開発
随分昔に、記載した上記javascript & perl に対するpython 版。
以下。
ポイントは、sortted()内に記載した「from functools import cmp_to_key」 と「key=cmp_to_key」
#!/usr/local/bin/python # -*- coding: utf-8 -*- from functools import cmp_to_key import pprint def main(): org_elms = [ {"name":"tanaka","pos":{"line": 1,"col":10}}, {"name":"suzuki","pos":{"line": 5,"col": 5}}, {"name":"yamada","pos":{"line": 5,"col":10}}, {"name":"sato", "pos":{"line":10,"col":10}} ] sorted_elms = sorted(org_elms, key=cmp_to_key(my_sort) ) print(pprint.pformat(sorted_elms, width=80)) def my_sort(elm1,elm2): print(elm1["pos"]["line"], elm2["pos"]["line"]) if elm1["pos"]["line"] < elm2["pos"]["line"]: return -1 elif elm1["pos"]["line"] > elm2["pos"]["line"]: return 1 if elm1["pos"]["col"] < elm2["pos"]["col"]: return -1 elif elm1["pos"]["col"] > elm2["pos"]["col"]: return 1 if elm1["name"] < elm2["name"]: return -1 elif elm1["name"] > elm2["name"]: return 1 return 0 if __name__ == '__main__': main()
hashmapをsortする場合も、ほぼ同様で、違いは、 呼び出し時に「.items()」を追加する程度です
sorted_access_summary = sorted(access_summary.items(), key=cmp_to_key(my_sort) ) def my_sort(elm1,elm2): if elm1[1] < elm2[1]: return -1 elif elm1[1] > elm2[1]: return 1 return 0