Как я могу разделить список на основе первого символа слова и поместить их в словарь, не используя модули? - PullRequest
2 голосов
/ 22 января 2020

Я пытаюсь разбить следующий список по начальному символу каждого слова:

word_list = ['be','have','do','say','get','make','go','know','take','see','come','think',
     'look','want','give','use','find','tell','ask','work','seem','feel','leave','call']

и поместить их в словарь без использования модулей.

Это то, что я пробовал:

word_list = ['be','have','do','say','get','make','go','know','take','see','come','think',
     'look','want','give','use','find','tell','ask','work','seem','feel','leave','call']
n = 'a'
x = []

dictionary = dict()

for c in range(97, 123):
        x.append(chr(c))
print(x)
print()

for i in x:
    for j in word_list:
        if i in dictionary.keys():
            if j.startswith(i):
                dictionary[i].append(j)
            else:
                dictionary = [j]
print(dictionary)

Ожидаемые результаты:

dictionary = {'a':['ask'],'b':['be'],...................}

Ответы [ 3 ]

3 голосов
/ 22 января 2020

Вы можете использовать setdefault или defaultdict:

word_list = ['be','have','do','say','get','make','go','know','take','see','come','think',
     'look','want','give','use','find','tell','ask','work','seem','feel','leave','call']

result = {}
for word in word_list:
    result.setdefault(word[0], []).append(word)

# OR

from collections import defaultdict

result = defaultdict(list)
for word in word_list:
    result[word[0]].append(word)

defaultdict имеет тот же интерфейс, что и dict, в противном случае его можно использовать везде, где вам нужно dict.

1 голос
/ 22 января 2020

Проблема с вашим кодом в том, что в вашем словаре нет ключей для начала, поэтому if i in dictionary.keys(): никогда не бывает истинным, потому что вы никогда не выполняете какой-либо код для помещения ключа в словарь. В основном вам нужно добавить в словарь, когда j начинается с i и i не является ключом в словаре:

for i in x:
    for j in word_list:
        if i in dictionary.keys():
            if j.startswith(i):
                dictionary[i].append(j)
        elif j.startswith(i):
            dictionary[i] = [j]
print(dictionary)

Вывод:

{'f': ['find', 'feel'], 
 'l': ['look', 'leave'],
 'd': ['do'],
 'g': ['get', 'go', 'give'],
 't': ['take', 'think', 'tell'],
 'h': ['have'],
 'u': ['use'],
 's': ['say', 'see', 'seem'],
 'm': ['make'],
 'b': ['be'],
 'a': ['ask'],
 'w': ['want', 'work'],
 'k': ['know'],
 'c': ['come', 'call']
}

Вы можете достичь того же результата с помощью вложенного словаря / списка понимания:

dictionary = { c : [w for w in word_list if w.startswith(c)] for c in [w[:1] for w in word_list] }
1 голос
/ 22 января 2020

Попробуйте код ниже,

word_list = ['be','have','do','say','get','make','go','know','take','see','come','think',
     'look','want','give','use','find','tell','ask','work','seem','feel','leave','call']

dictionary = dict()
for c in map(chr,range(97, 123)):
    words = [i for i in word_list if i.startswith(c)]
    if words:
        dictionary[c] = words
print(dictionary)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...