Присвоение ключей словарю из строки - PullRequest
0 голосов
/ 29 октября 2018

У меня есть строка с именем sentence: 'the sly fox jumped over the brown dog'

Мне нужно создать словарь под названием Positions. Ключи для Positions должны быть символами в sentence. Значения должны быть индексом для этих символов.

Например, желаемый результат будет:

{'t':0, 'h':1, 'e':2, ' ':3 ...} и т. Д. И т. Д.

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

Пока что я только что создал пустой словарь и пытаюсь присвоить ему ключи и значения после события:

Positions = {}

Я начал не с той ноги?

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

, поскольку символ может повторяться в строке, я сохраняю их в виде списка

str = "the sly fox jumped over the brown dog"
char_items = list(str) 
dictionary = {}

for index,character in enumerate(char_items): 
    if character not in dictionary.keys():
        dictionary[character] = [] # because same character might be repeated in different positions
    dictionary[character].append(index)

for character,positions in dictionary.items():
    print(character, positions)
0 голосов
/ 13 ноября 2018

Спасибо всем за предложения! Как Асиф предлагал выше, для меня путь вперед заключался в преобразовании строки в список. ??

Я также нашел «три способа создания словарей в Python» Ника Данна очень полезными: https://developmentality.wordpress.com/2012/03/30/three-ways-of-creating-dictionaries-in-python/

Три шага, которые я использовал:

ПРИМЕР ПРОБЛЕМА: "Создать словарь с ключами, состоящими из символов в алфавите ('abcdefghijklmnopqrstuvwxyz'), и значениями, состоящими из чисел от 0 до 26. Сохраните это как позиции. "


1) Превратить алфавит из строки в список символов

chars = []
for AtoZ in alphabet:
chars += AtoZ
print(chars)

[' ',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z']

2) создайте второй список с именем numbers

numbers = list(range(0,27))
numbers

Out[16]: 
[0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26]

3) Создайте словарь под названием позиции {} из двух списков:

positions = {}
positions = dict(zip(chars,numbers))

print(positions)
{'v': 22, 'g': 7, 'w': 23, 'h': 8, 'a': 1, 'm': 13, 'c': 3, 'o': 15, 'd': 4,  's': 19, 'r': 18, 'u': 21, 'j': 10, 't': 20, 'f': 6, 'k': 11, 'y': 25, 'z': 26, 'l': 12, ' ': 0, 'b': 2, 'e': 5, 'q': 17, 'n': 14, 'i': 9, 'p': 16, 'x': 24}

? Надеюсь, этот пост поможет другим преобразовать строки и / или списки в словари с помощью Python.

0 голосов
/ 29 октября 2018

Вы можете сделать что-то вроде этого:

result = {}
s = 'the sly fox jumped over the brown dog'

for i, c in  enumerate(s):
    result.setdefault(c, []).append(i)

print(result)

выход

{'m': [14], 'e': [2, 16, 21, 26], 'v': [20], 's': [4], 'n': [32], 'h': [1, 25], 'w': [31], 'l': [5], 'o': [9, 19, 30, 35], 'x': [10], 'p': [15], 'd': [17, 34], 'g': [36], 't': [0, 24], 'u': [13], 'f': [8], 'y': [6], 'b': [28], 'j': [12], ' ': [3, 7, 11, 18, 23, 27, 33], 'r': [22, 29]}

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

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