как преобразовать элементы dict в предложение - PullRequest
0 голосов
/ 06 августа 2020

У меня есть входные данные с двумя индексами слов и заметками.

indexes={'Laptops':'1','Mob':'2','Cars':'3','Bus':4}
    Notes={
 

   
    'indexs':[1,3],
    'Laptops':[
        "dell","asus","acer"
    ],
    'Mob':[
        "mi","realme"
    ],
   'Bus':[
     "aB"
 
   ],
    'Cars':["Not found"
         ]

}

Создал генератор предложений

def SenGen(alpha,beta):
    for a,b in alpha.items():
        for c,d in beta.items():
            if c in a:
                print(f"{a} are ", end="")
                for i, e in enumerate(b):
                    if i == len(b)-1:
                        print(f"and {e}. ", end="")
                    elif i == len(d)-2:
                        print(f"{e} ", end="")
                    else:
                        print(f"{e}, ", end="") 

с помощью SenGen, я создал предложение, которое показано ниже.

SenGen(Notes,indexes)

вывод

Laptops are dell, asus, and acer. Mob are mi, and realme. Bus are and aB. Cars are and not found. 

в приведенном выше выводе в ноутбуках У меня есть 3 слова, разделенных 'и' , ** В mob i есть два слова, разделенные 'и' **. В то время как в шине у меня только одно слово. но 'and' перед aB , а в случае его тех же автомобилей я не нашел .

желаемый результат должен быть таким, как показано ниже.

вывод:

Laptops are dell, asus, and acer. Mob are mi, and realme. Bus are aB. Cars are  not found. 

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

1.if i == len(b)==1:
                            
    print(f" is {e} ", end="")

2.if i == len(b)==0:
                            
    print(f" is {e} ", end="")
3.if i == len(b)<1:
                            
    print(f" is {e} ", end="")
4.if i == len(b)>1:
                            
    print(f" is {e} ", end="")

, но я не смог ее решить.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Подтвердить раньше.

def SenGen(alpha,beta):
    for a,b in alpha.items():
        for c,d in beta.items():
            if c in a:
                print(f"{a} are ", end="")
                if len(b) == 1:
                    print(f"{e}. ", end="")
                else:
                    for i, e in enumerate(b):
                        if i == len(b)-1:
                            print(f"and {e}. ", end="")
                        elif i == len(d)-2:
                            print(f"{e} ", end="")
                        else:
                            print(f"{e}, ", end="")
0 голосов
/ 06 августа 2020

Вы можете решить вашу проблему, полагаясь на списки и их методы в Python:

keys = list(Notes.keys())
keys.remove('indexs')

for key in keys:
    first_clause = ', '.join(Notes[key][:-1])
    last_clause = Notes[key][-1:][0]
    
    if len(first_clause) == 0:
        print(key + ' is ', last_clause, end='. ')
    else:
        print(key + ' are ', first_clause, ', and ', last_clause, end='. ')

Тогда ваш результат будет:

Laptops are  dell, asus , and  acer. Mob are  mi , and  realme. Bus is  aB. Cars is  Not found. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...