Poo*_*vin 2 sorting robotframework
我有一个包含特殊字符的字符串列表,列表如下:
1.Kevin_richard
2.Dan_ronald
3.Daniel_white
4.David_jacob
5.eddie_bacon
Run Code Online (Sandbox Code Playgroud)
为了按升序对列表进行排序,我使用了集合库中的Sort List(字符串按字母顺序排序,数字按数字顺序排序)关键字。
*** Settings ***
*** Test Cases ***
TC Title
Sort the given list of usernames in ascending order
*** Keywords ***
Sort the given list of usernames in ascending order
${sorted_order_asc}= Copy List ${default_order_username} //default order represents list of five user names
Sort List ${sorted_order_asc}
Run Code Online (Sandbox Code Playgroud)
执行上述脚本时,列表按以下顺序排序:
但这不是预期的排序顺序。在上面的列表中,Dan_ronald 必须位于列表的顶部。排序列表忽略特殊字符,因此在跳过 Dan 并检查下一个字母(r vs i)后划线。因此,Daniel_white 位居榜首。
任何帮助解决这个问题的帮助将不胜感激。
这可以通过在下面的示例中使用 python 函数最容易地实现,创建自定义机器人关键字,该关键字采用具有正确字符排序顺序的字符串。然后使用它来相应地对列表项进行排序。
*** Settings ***
Library Collections
*** Variables ***
@{list}
... Kevin_richard
... Dan_ronald
... Daniel_white
... David_jacob
... eddie_bacon
*** Test Cases ***
Standard Sorting
${sorted_list} Sort List Custom ${list}
${result} Create List
... Dan_ronald
... Daniel_white
... David_jacob
... Kevin_richard
... eddie_bacon
Lists Should Be Equal ${sorted_list} ${result}
Reverse Sorting
${alphabet_reverse} Set Variable zyxwvutsrqpomnlkjihgfedcbaZYXWVUTSRQPOMNLKJIHGFEDCBA9876543210_${SPACE}
${sorted_list} Sort List Custom ${list} ${alphabet_reverse}
${result} Create List
... eddie_bacon
... Kevin_richard
... David_jacob
... Daniel_white
... Dan_ronald
Lists Should Be Equal ${sorted_list} ${result}
*** Keywords ***
Sort List Custom
[Documentation]
... Sort a list using a custom sort order
...
... This keyword sorts a list according to a custom sort order
... when given, or the default one when not provided.
...
... Arguments:
... - input_list {list} a list of strings to be sorted.
... - alphabeth {string} a string of characters according to which order they
... must be sorted.
...
... Returns: {list} the sorted list.
...
[Arguments] ${input_list} ${alphabet}=${SPACE}_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
${ns} Create Dictionary alphabet=${alphabet} input_list=${input_list}
${sorted} Evaluate sorted(input_list, key=lambda word: [alphabet.index(c) for c in word]) namespace=${ns}
[Return] ${sorted}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3993 次 |
| 最近记录: |