天天看點

python清單套着清單_Python清單集字典多列排序,python,套

原始資料:

m_list = [{'markname': '大衆', 'sm_type': 1.5, 'sm_zh': 0.4},

{'markname': '特斯拉', 'sm_type': 0, 'sm_zh': 0.3},

{'markname': '寶馬', 'sm_type': 2, 'sm_zh': 0.95},

{'markname': '奔馳', 'sm_type': 1, 'sm_zh': 0.6},

{'markname': '五菱宏光', 'sm_type': 1, 'sm_zh': 0.5}]

這是一組商标資料,初步的要求是按照相似類型:sm_type倒叙,中文相似度:sm_zh倒叙排列,我們可以這樣寫:

sorted(tm_list, key=lambda tm: (tm["sm_type"], tm["sm_zh"]), reverse=True)

結果:

[

{'markname': '寶馬', 'sm_type': 2, 'sm_zh': 0.95},

{'markname': '大衆', 'sm_type': 1.5, 'sm_zh': 0.4},

{'markname': '奔馳', 'sm_type': 1, 'sm_zh': 0.6},

{'markname': '五菱宏光', 'sm_type': 1, 'sm_zh': 0.5},

{'markname': '特斯拉', 'sm_type': 0, 'sm_zh': 0.3}]

結果正确無誤,但是需求你們的懂的,就像是女朋友的臉,風雲變幻。果然,很快變化來了。我們需要根據:sm_type倒叙,sm_zh倒叙,markname長度正序排列,這時候多列排序的規則不再一緻,是以reverse就顯得力不從心了。按照名稱長短正序排列的話 “烨辰” 應該在 “意迪拉凱” 前面

那我們該如何解決這個問題呢,Python中還封裝了另一個好用的方法,就是“-”号排序。Like This:

sorted(tm_list, key=lambda tm: (-tm["sm_type"], -tm["sm_zh"], len(tm["markname"])))

排序中加“-”号的為倒叙,不加“-”号的為正序,我們看一下排序結果:

[

{'markname': '寶馬', 'sm_type': 2, 'sm_zh': 0.95},

{'markname': '大衆', 'sm_type': 1.5, 'sm_zh': 0.4},

{'markname': '奔馳', 'sm_type': 1, 'sm_zh': 0.6},

{'markname': '五菱宏光', 'sm_type': 1, 'sm_zh': 0.5},

{'markname': '特斯拉', 'sm_type': 0, 'sm_zh': 0.3}]