Я работал над удалением повторяющихся слов из входной строки. Я использовал OrderedDict для того, чтобы сделать это. Я попытался реализовать вышеизложенное с помощью двух разных методов, которые почти одинаковы, но вывод программы отличается. Кто-нибудь может объяснить, почему это происходит?

Код 1:

    from collections import OrderedDict
    data = "the an a the"
    data="".join(OrderedDict.fromkeys(data))
     print(data)

Код 2:

    from collections import OrderedDict   
    data = "the an a the"
    data = "".join(OrderedDict.fromkeys(data.split(" ")))   
    print(data)

Вывод кода 1: «an an» Вывод кода 2: «theana» Я хочу знать, почему это различие вызвано, а также я ожидаю получить результат как «a a», так как его получить? ?

1
Prachi Vaishnav 1 Июл 2019 в 12:34

3 ответа

Лучший ответ

В вашем 1-м подходе:

data="".join(OrderedDict.fromkeys(data))

В основном рассматривает переменную data как итерируемую . В этом случае он будет рассматривать строку как итерируемую , которая содержит unique символов. Таким образом, уникальными символами будут t, h, e, ,a, n, а упорядоченный словарь создается с полностью 6 ключи.


В вашем втором подходе:

data = "".join(OrderedDict.fromkeys(data.split(" ")))

Вы разбиваете строку в список (что означает итерируемый ). и элементами списка являются the, an, a, и упорядоченный словарь создается с 3 уникальными значениями в качестве ключей.

И на последнем шаге вы присоединяетесь к ним, что означает, что только ключи будут возвращены в виде строки.

Надеюсь это поможет.

3
Tony Stark 1 Июл 2019 в 09:43
string1 = "the an a the"
words = string1.split()
print (" ".join(sorted(set(words), key=words.index)))
0
suman das 1 Июл 2019 в 09:38

{{Х0}} создаст словарь из каждого символа внутри строки «данные». результат:

{
    '**t**': None,
    '**h**': None,
    '**e**': None,
    ...
}

В то время как:

{{Х0}} создаст новый словарь с каждым словом в строке (или, точнее, всем разделенным пробелом) в качестве ключей нового словаря.

Результат:

{
    '**the**': None,
    '**an**': None,
    ...
}

И так как вы хотите получить результат, разделенный пробелами, вы должны объединить данные обратно с пробелом,

" ".join(OrderedDict.fromkeys(data.split(" ")))
 ^ #Notice this space here.

Кроме того, попробуйте отладить ваш код, отладка является основной частью программирования и дает гораздо более глубокое понимание кода.

0
ruhaib 1 Июл 2019 в 09:47