Есть ли какое-либо ключевое слово фреймворка робота для сортировки списка строк, содержащих специальные символы? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть список строк, который содержит специальные символы, список ниже:

1.Kevin_richard
2.Dan_ronald
3.Daniel_white
4.David_jacob
5.eddie_bacon

Для сортировки списка по возрастанию я использовал Сортировка списка (строки отсортированы по алфавиту и по номерам) ключевое слово из библиотеки коллекций.

*** 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}

При выполнении вышеуказанного скрипта список сортируется в следующем порядке:

  1. Daniel_white
  2. Dan_ronald
  3. David_jacob
  4. eddie_bacon
  5. Kevin_richard

Но это не ожидаемый порядок сортировки. В приведенном выше списке Dan_ronald должен быть в верхней части списка. Список сортировки игнорирует специальные символы, поэтому подчеркивает после пропуска Дана и проверяет следующий алфавит (r против i). В результате этого Daniel_white возглавляет список.

Буду признателен за любую помощь в решении этой проблемы.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Список сортировки игнорирует специальные символы, поэтому подчеркивает после пропуска Дана и проверяет следующий алфавит (r против i).

Это не так - Sort List никоим образом не изменяет членов и не пропускает никаких фрахтователей. Когда он запустился, он сравнил 'i' с '_' и (каким-то образом) решил, что 'i' с меньшим символьным кодом, чем '_'.
Фактически, Sort List - это просто оболочка над методом sort() в Python.

Я запустил ваш список источников в реплее, и он вышел отсортированным ожидаемым образом - «Dan_» перед «Daniel _»:

>>> a = ["Kevin_richard", "Dan_ronald", "Daniel_white", "David_jacob", "eddie_bacon"]
>>> a
['Kevin_richard', 'Dan_ronald', 'Daniel_white', 'David_jacob', 'eddie_bacon']
>>> a.sort()
>>> a
['Dan_ronald', 'Daniel_white', 'David_jacob', 'Kevin_richard', 'eddie_bacon']

Есть еще кое-что тревожное - при обычной сортировке «Кевин» должен стоять перед «Эдди» (заглавные латинские буквы с кодами перед маленькими), но это не вывод в теле вашего вопроса. На самом деле, ваш вывод выглядит как отсортированный без учета регистра, что ключевое слово не может сделать наверняка.

Что заставляет меня думать, что это еще не все:

  • Вы уверены, что список образцов, который вы вставили, точно такой же, как список, с которым вы работаете в своем коде? Это может быть с хартиями Юникода, которые похожи на латинские (например, кириллица, у многих из них есть коллизии в визуальном восприятии), которые не были вставлены в вопрос как есть.
  • Есть ли какие-либо пробельные символы вокруг исходных значений? Если да, это повлияет на сортировку (и может объяснить случай 'Эдди') - удалите их перед выполнением сортировки, если вы хотите сравнить только имена.
  • Пример кода все вы делаете, чтобы получить этот результат?
  • Наконец - я удалил числа перед значениями - они бы сильно повлияли на сортировку, но нужно спросить - их нет в исходных значениях, верно?
0 голосов
/ 08 ноября 2018

Этого легче всего достичь с помощью функции 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...