[英]How to sort the list based on the string?
在這里,我嘗試根據一個字符串對字符串列表進行排序,在這里是我的測試用例,
第一種情況:
par_str = "abcd"
list_str = ['bb','ba','ab']
sorted(list_str, key=par_str)
輸出: ['ab','ba','bb']
第二種情況:
par_str = "bacd"
list_str = ['bb','ba','ab']
sorted(list_str, key=par_str)
輸出: ['bb','ba','ab']
從第一種情況開始,列表順序基於par_str
字符串更改。 並且第二個測試用例的列表順序沒有變化,因為它具有相同的優先級。 那么如何寫上面的邏輯。 我已經嘗試過,但遇到錯誤TypeError: 'str' object is not callable
在字符和等級之間進行映射,並在key
功能中使用該信息。
>>> par_str = "abcd"
>>> order = {c:i for i, c in enumerate(par_str)} # <------------
>>> order
{'a': 1, 'c': 2, 'b': 0, 'd': 3}
>>> list_str = ['bb','ba','ab']
>>> sorted(list_str, key=lambda s: [order[c] for c in s])
['ab', 'ba', 'bb']
>>> par_str = "bacd"
>>> order = {c:i for i, c in enumerate(par_str)} # <-----------
>>> order
{'a': 1, 'c': 2, 'b': 0, 'd': 3}
>>> list_str = ['bb','ba','ab']
>>> sorted(list_str, key=lambda s: [order[c] for c in s])
['bb', 'ba', 'ab']
>>> par_str = "abcd"
>>> list_str = ['bb','ba','ab']
>>>
>>> def key_func(s):
... return [par_str.index(i) for i in s]
...
>>> sorted(list_str, key=key_func)
['ab', 'ba', 'bb']
>>> par_str = "bacd"
>>> sorted(list_str, key=key_func)
['bb', 'ba', 'ab']
如果par_str
足夠長,則值得在@falsetru的答案中使用helper dict
。
如果您希望能夠測試關鍵功能,則最好使用完整的函數定義而不是lambda。
這是使按鍵功能真正快速的一個小技巧。 (字典與@falsetru的字典有細微的差別)
>>> par_str = "abcd"
>>> list_str = ['bb','ba','ab']
>>> sorted(list_str, key=lambda s, trans={ord(c): i for i, c in enumerate(par_str)}:s.translate(trans))
['ab', 'ba', 'bb']
>>> par_str = "bacd"
>>> sorted(list_str, key=lambda s, trans={ord(c): i for i, c in enumerate(par_str)}:s.translate(trans))
['bb', 'ba', 'ab']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.