Как заставить python использовать порядок букв в строке как часть словаря со значениями, указывающими количество раз, когда появляется каждая уникальная буква - PullRequest
1 голос
/ 20 июня 2020

1) Во-первых, я знаю, что в наборах и словарях нет порядка, этот вопрос меня смущает, и я пытаюсь разобраться в этом, вы можете сказать снизу мои попытки выяснить, как решить проблему. 2) Я знаю, что вопрос выглядит неважно, поэтому заранее извините, не уверен, как сделать здесь более аккуратным, потратил более получаса, пытаясь сделать его в правильном формате et c :-), и это все еще не так, как хотелось бы.

Резюме: Моя трудность заключается в том, что вопрос требует от меня создания словаря со значениями в определенном порядке, чтобы я мог получить ответ на конкретный c ценности. Я могу сделать это без заказа, который он запрашивает, если только я не понял неправильно. * Это вопрос курса, о котором я говорю, я пробовал некоторые вещи, которые не увенчались успехом в соответствии с требуемым ответом:

(если вы не хотите проверять ссылку, ответ, который я получаю код здесь:

   {' ': 8, 'e': 8, 'i': 5, 'a': 4, 't': 4, 'l': 3, 'u': 3, 'h': 2, 'n': 2, 's': 2, 'r': 2, 'J': 1, 'c': 1, 'b': 1, 'd': 1, 'g': 1, 'f': 1, 'k': 1, 'm': 1, 'o': 1, 'q': 1, 'p': 1, 'w': 1, 'v': 1, 'y': 1, 'x': 1, 'z': 1})

Строчные и прописные буквы английского алфавита sh должны храниться в виде строковой переменной алфавита.

Рассмотрим предложение «Джим быстро понял, что красивые платья - дорогое удовольствие ». Создайте словарь count_letters с ключами, состоящими из каждой уникальной буквы в предложении, и значениями, состоящими из количества раз, когда каждая буква используется в этом предложении. Считайте буквы верхнего и нижнего регистра в словаре отдельно. *

Какое 3-е значение словаря? Подсказка: помните, что Python имеет нулевой индекс!

мой ответ 1, правильный (ДА, действительно дофамин)

Какое 8-е значение в словаре? Подсказка: помните, что Python имеет нулевой индекс!

3 правильно (УРА, я думаю ... почему это было после многих попыток, глядя на мой ответ, который тогда не имел смысла)

Обратите внимание, что я случайно получил 2-й правильный ответ и не знаю почему.

Очевидно, что порядок ключей в словаре должен быть в {J: value, i: value} Я пробовал счетчик, если вы видите ссылку, которую вы видите в моих первоначальных попытках, которая не дает необходимого ответа, я пробовал set (предложение) и set (алфавит), который обеспечивает следующий «порядок»: {'J', 'a', 'b ',' c ',' d ',' e ',' f ',' g ',' h ',' i ',' k ',' l ',' m ',' n ',' о ',' p ',' q ',' r ',' s ',' t ',' u ',' v ',' w ',' x ',' y ',' z '}

Я пытался несколько дней, часами пробовать что-то безрезультатно, у меня появилась надежда, когда я увидел несколько страниц go, которые из ответа на переполнение стека см. Код ниже, дали мне надежду .... Это действительно работал ОДИН РАЗ в командной строке (J, i, m ...), но по какой-то причине он вернулся к Jabcde ....)

Я также нашел это полезным и очень коротким, но все же у меня проблема с тем, что «порядок» набора остается прежним:

    a = sentence
    b = dict.fromkeys(a[i], 0)
    for i in a[i]:
        b[i] += 1

Подсчет количества уникальных букв в строке в Python 3

Вот еще код.

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

вот еще код: в моих джунглях замешательства.

    import string
    alphabet = string.ascii_letters
    alphabet
    sentence = 'Jim quickly realized that the beautiful gowns are expensive'

Python поддерживать порядок на пересечении списков

Это позволяет разместить список в том же порядке, что и предложение. Я использую A как алфавит и B как список Ура !!! Спасибо Kasramvd, но, увы, он работал только в командной строке, когда я изменял порядок (ОДИН РАЗ). Но дал мне надежду продолжать настаивать. Как видите, я закомментировал код на случай, если захочу его использовать. Я использую python3 интерфейс навеса.

    a = sentence
    b = dict.fromkeys(a[i], 0)
    for i in a[i]:
        b[i] += 1


    #A = set(alphabet)
    #A = list(A)
    #B = set(sentence)

        #B = list(B)

    #maybe = set(B)&set(A)

    #letter_set = set(A) & set(B)

    letter_list = list(letter_set)

    common = sorted(set(A).intersection(set(B)) ,key=lambda x:B.index(x))

    letter_list = common #it is already a list

    count_letters = {}

    cnt_lowercase = 0

    cnt_uppercase = 0

    count = 0


    #iterate over the letter_list
    for i in range (len(letter_list)-1):
        #count matches for each letter of the sentence
        for j in range(len(sentence)-1):
            gr = letter_list[i] in sentence[j]
            print i,j
            print("sentence letter : " , letter_list[i], "sentence letter: " + sentence[j])

            print  gr 
            if gr == True:
                count +=1;
                if j == len(sentence)-1:
                    print("count= " , count)
                    count_letters[i] = count
            print(count_letters)
        if j > len(sentence):
            print("reached the last letter of the sentence: " , sentence[j])
            count = 0
    print j
    print ("length of the sentence is : " , len(sentence))
    print count_letters
    print letter_list

    common = sorted(set(A).intersection(set(B)) ,key=lambda x:B.index(x)) 

так что в основном это все еще установлено (A) и установлено (B)

Есть идеи ??? Я слишком упрям, чтобы допустить это go, после этого я просто превращу его в функцию, чтобы я мог ответить на следующий вопрос, поскольку это требуется для гораздо большей строки из более чем 5 строк. Я, вероятно, вернусь, если снова застряну.

надеюсь, что информации было достаточно.

Ответы [ 4 ]

1 голос
/ 20 июня 2020

Словари представляют собой неупорядоченный набор элементов в виде пар ключ: значение . Я решил задачу следующим образом:

d={}
s="Jim quickly realized that the beautiful gowns are expensive"
for i in s:
    d[i]=s.count(i)
print(d)

Я создал пустой словарь d и сохранил строку в переменной s . Затем я использовал для l oop, взяв каждый элемент строки s в i , а затем добавив пары значений ключа, присвоив значения ключам: dict_name[key]=value. Значения добавляются строковым методом string_var.count(element): он подсчитывает, сколько раз элемент встречается в string_var. Таким образом, все пары ключ: значение будут добавлены в пустой словарь.

Это напечатает желаемый результат:

{'J': 1, 'i': 5, 'm': 1, ' ': 8, 'q': 1, 'u': 3, 'c': 1, 'k': 1, 'l': 3, 'y': 1, 'r': 2, 'e': 8, 'a': 4, 'z': 1, 'd': 1, 't': 4, 'h': 2, 'b': 1, 'f': 1, 'g': 1, 'o': 1, 'w': 1, 'n': 2, 's': 2, 'x': 1, 'p': 1, 'v': 1}

Надеюсь, это было полезно!

0 голосов
/ 22 июня 2020

Я добавил комментарии и операторы печати, чтобы я мог увидеть и понять, почему этот код работает так, как задумано, и, надеюсь, он поможет кому-то другому

sentence = 'Jim quickly realized that the beautiful gowns are expensive'
count_letters = {}
for letter in sentence:
    print ("letter in sentence is: ", letter) 
    if letter in alphabet: # so if there are spaces they will not be included into the dictionary
        print ("letter in alphabet is: ", letter) 
        if letter in count_letters.keys(): #becuase it has found a letter in both the sentence and alphabet in the first finding
            count_letters[letter] += 1
            print ("count_letters[letter] is: ",count_letters[letter])
            print ("letter is: " , letter)
        else:
            count_letters[letter] = 1
            print ("count_letters[letter] is: ",count_letters[letter])
            print ("letter is: " , letter)
    else: # this will help me realise when that happens
         print ("letter: ")
         print (letter)
         print("not in alphabet")
print(count_letters)            
print(list(count_letters.values())[2])
print(list(count_letters.values())[7])
0 голосов
/ 22 июня 2020

Я только что проверил ответ на шоу после того, как понял эту опцию, вот он:

for letter in sentence:
    if letter in alphabet:
        if letter in count_letters.keys():
            count_letters[letter] += 1
        else:
            count_letters[letter] = 1
            
print(list(count_letters.values())[2])

1

print(list(count_letters.values())[7])

3

print(count_letters)

{'J ': 1,' a ': 4,' c ': 1,' b ': 1,' e ': 8,' d ': 1,' g ': 1,' f ': 1,' i ': 5,' h ': 2,' k ': 1,' m ': 1,' l ': 3,' o ': 1,' n ': 2,' q ': 1,' p ': 1, 's': 2, 'r': 2, 'u': 3, 't': 4, 'w': 1, 'v': 1, 'y': 1, 'x': 1, 'z': 1}

хммм .... жаль, что более короткие ответы не работают, но я предполагаю, что он не предполагает никаких предшествующих функций, что все еще хорошо. И я неправильно понял вопрос, думая, что мне нужен заказ Джима. Мне нужно понять шаги этой программы сейчас, так как одного ответа будет недостаточно, поскольку я пытаюсь выяснить, где сейчас понимается, что count_letters.keys () имеет информацию, когда она изначально была объявлена ​​пустой ... что там происходит, чтобы обнаружить, что у него есть необходимые данные.

0 голосов
/ 20 июня 2020

Я думаю, что самый простой способ сделать это - просто использовать функцию Counter, а затем отсортировать по факту следующим образом:

from collections import Counter
sentence = 'Jim quickly realized that the beautiful gowns are expensive'
counts = Counter(sentence)
out = dict(sorted(counts.items()))

output:

{' ': 8, 'J': 1, 'a': 4, 'b': 1, 'c': 1, 'd': 1, 'e': 8, 'f': 1, 'g': 1, 'h': 2, 'i': 5, 'k': 1, 'l': 3, 'm': 1, 'n': 2, 'o': 1, 'p': 1, 'q': 1, 'r': 2, 's': 2, 't': 4, 'u': 3, 'v': 1, 'w': 1, 'x': 1, 'y': 1, 'z': 1}

Я думаю, что это достигает того, чего вы хотите, но, как упоминалось в комментариях, мы не видим фактический вопрос. Дайте мне знать, если это сработает или вам потребуется дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...