Создание словарных представлений python

У меня есть список строк этой формы:

['1---d--e--g--gh','1---c---e--gh--', '1---ghj--h--h--', '1---g--gkk--h--', '1---d--dfe---fg', '1---c--d--dh--j', '1---f--gh--h--h', '1---fg-hg-hh-fg', '1---d--cd7--d--', '1---gghG--g77--', '1---hkj--kl--l-', '1---gged--ghjg-', '1---kk--k--k---', '1---gjklk--khgl', '1---c---d---dh-', '1---g---ghkk--k', '1---fH---h--g--', '1---f--gij---hj', '1---g--ghg---g-', '1---c---dc--cf-', '1---d---e--gh--', '1---l--lmnmlk-l', '1---d77---c--d-', '1---kj--k--lk-l', '1---g---gd--e--', '1---hhgh--d---h', '1---f--f---h---', '1---g--gkh-jkhg', '1---fg-hgh-fhfg', '1---k-k--klkj--', '1---g--l--kjhg-', 'gh--g---gh--g--', '1---f--df--fhij', '1---g--g--g---g', '1---g---gh-kh--', '1---g---gk--h--']

Я хочу создать словарные представления 3 типов: a, b, c.

a разделены хотя бы одним тире -, b не менее чем двумя -- и c не менее чем тремя тире ---.

Например, 1--d--d--dfd-dc---f---g--ghgf-ghg-hj--h должен давать:

a: {d, d, dfd, dc, f, g, ghgf, ghg, hj, h}
b: {d, d, dfd-dc, f, g, ghgf-ghg-hj, h}
c: {d--d--dfd-dc, f, g--ghgf-ghg-hj--h}

Как словарные представления (мы пропускаем 1 в начале). Кто-нибудь знает, как это сделать на питоне?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
62
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

string = '1--d--d--dfd-dc---f---g--ghgf-ghg-hj--h'
a = [i.strip("-") for i in string.split("-") if i and i.strip("-")!='1']
b = [i.strip("-") for i in string.split("--") if i and i.strip("-")!='1']
c = [i.strip("-") for i in string.split("---") if i and i.strip("-")!='1']

Если у вас есть список vps, содержащий эти строки, вы можете просто сделать:

l =[[i.strip("-") for i in string.split("-") if i and i.strip("-")!='1'] for string in vps]

привет, спасибо за ваш ответ. еще один вопрос, если мое имя в списке vps, я просто сделаю a = [i.strip("-") for i in vps.items[1:].split("-") if i != ""]?

joasa 12.06.2019 19:14

Вы хотите, чтобы он возвращал список, содержащий все различные списки строк?

DSC 12.06.2019 19:17

Я думаю, что это не тест gh--g---gh--g--

TomNash 12.06.2019 19:18

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

joasa 12.06.2019 19:21

обновленный ответ @joasa

DSC 12.06.2019 19:21

Используя пример использования:

string = "1--d--d--dfd-dc---f---g--ghgf-ghg-hj--h"

def vocab_representation(string):
    import re
    letter_dict = {}
    # remove leading 1 and -, remove trailing -
    string = re.sub(r'^1?-*(.*\w).*$', r'\1', string)
    letter_dict['a'] = [x for x in string.split("-") if x]
    # No words with leading -
    letter_dict['b'] = [x for x in string.split("--") if (x and x[0] != '-')]
    # No words with leading -
    letter_dict['c'] = c = [x for x in string.split("---") if (x and x[0] != '-')]
    return letter_dict
res = vocab_representation(string)

Выход:

{
 'a': ['d', 'd', 'dfd', 'dc', 'f', 'g', 'ghgf', 'ghg', 'hj', 'h'],
 'b': ['d', 'd', 'dfd-dc', 'ghgf-ghg-hj', 'h'],
 'c': ['d--d--dfd-dc', 'f', 'g--ghgf-ghg-hj--h']
}

Используя более сложный тестовый пример:

string = "gh--g---gh--g--"
res = vocab_representation(string)

Выход:

{
 'a': ['gh', 'g', 'gh', 'g'],
 'b': ['gh', 'g', 'g'],
 'c': ['gh--g', 'gh--g']
}
lines = ['1--d--d--dfd-dc---f---g--ghgf-ghg-hj--h']

a = []
b = []
c = []

def go():    
    for line in lines:
        line = line[1:]
        line = line.strip('-')
        global a, b, c
        a = line.split('-')
        b = line.split('--')
        c = line.split('---')

def sanitize():
    global a, b

    tmpa = []
    for s in a:
        if s != '':
            tmpa.append(s.strip('-'))

    tmpb = []
    for s in b:
        if s != '':
            tmpb.append(s.strip('-'))

    a = tmpa
    b = tmpb

go()
sanitize()
print("a: {" + ', '.join(a) + "}")
print("b: {" + ', '.join(b) + "}")
print("c: {" + ', '.join(c) + "}") 

Другие вопросы по теме