J'ai une liste qui contient une conversation de chat entre l'agent et le client.

chat = ['agent',
        'Hi',
        'how may I help you?',
        'customer',
        'I am facing issue with internet',
        'agent',
        'Can i know your name and mobile no.?'
        'customer',
        'john doe',
        '111111',..... ]

Ceci est un exemple de liste de discussion.

Je cherche à diviser la liste en deux parties, agent_chat et customer_chat, où agent_chat contient toutes les lignes que l'agent a dites, et customer_chat contenant les lignes dites par client.

Quelque chose comme ça (sortie finale).

agent_chat = ['Hi','how may I help you?','Can i know your name and mobile no.?'...]
customer_chat = ['I am facing issue with internet','john doe','111111',...]

Je suis confronté à des problèmes en résolvant cela, j'ai essayé d'utiliser la méthode list.index () pour diviser la liste de discussion en fonction des index, mais j'obtiens plusieurs valeurs pour le même index.

Pour par exemple. [chat.index(l) for l in chat if l=='agent'] Il renvoie: [0, 0], car il ne me donne que la première occurrence.

Existe-t-il un meilleur moyen d'obtenir le résultat souhaité?

-1
Shubham R 15 mars 2021 à 10:13

5 réponses

Meilleure réponse

Ce serait ma solution à votre problème.

chat = ['agent',
        'Hi',
        'how may I help you?',
        'customer',
        'I am facing issue with internet',
        'agent',
        'Can i know your name and mobile no.?',
        'customer',
        'john doe',
        '111111']

agent_list = []
customer_list = []

agent = False
customer = False
for message in chat:
    if message == 'agent':
        agent = True
        customer = False
    elif message == 'customer':
        agent = False
        customer = True
    elif agent:
        agent_list.append(message)
    elif customer:
        customer_list.append(message)
    else:
        pass
1
Nuran 15 mars 2021 à 07:21

index() ne renvoie que le premier index de l'élément, vous devrez donc accumuler l'index de toutes les occurrences en itérant sur la liste.

Je suggérerais de résoudre cela en utilisant une simple boucle for comme:

agent_chat = []
customer_chat = []
chat_type = 'agent'
for chat in chats:
    if chat in ['agent', 'customer']:
        chat_type = chat
        continue
        
    if chat_type == 'agent':
        agent_chat.append(chat)
    else:
        customer_chat.append(chat)
    
print(agent_chat)
print(customer_chat)

D'autres approches comme la compréhension de liste nécessiteront deux itérations de la liste.

6
Krishna Chaurasia 15 mars 2021 à 07:22

Voici ma solution. Je ne sais pas que c'est le meilleur mais j'espère que ça aide

def chat_lists(chat):
agent_chat = []
customer_chat = []

user_flag = ""
for message in chat:
    if message == 'agent':
        user_flag = 'agent'
    elif  message == 'customer':
        user_flag = 'customer'
    else :
        if user_flag == 'agent':
            agent_chat.append(message)
        else:
            customer_chat.append(message)
return customer_chat, agent_chat
0
berkeeb 15 mars 2021 à 07:29

Vous pouvez faire quelque chose comme ça.

chat = ['agent',
    'Hi',
    'how may I help you?',
    'customer',
    'I am facing issue with internet',
    'agent',
    'Can i know your name and mobile no.?'
    'customer',
    'john doe',
    '111111']
    agent = []
    customer = []
    
    for j in chat:
        if j=='agent':
            curr = 'agent'
            continue
        if j=='customer':
            curr = 'customer'
            continue
        if(curr=='agent'):
            agent.append(j)
        else:
            customer.append(j)
    
  print(agent)
  print(customer)
0
naresh_321 15 mars 2021 à 07:45

Vous pouvez configurer une boucle while pour analyser les messages et configurer une variable pour qu'elle agisse comme un «commutateur» pour savoir si l'agent ou le client parle.

# Get the current speaker (first speaker)
current_speaker = chat[0]

# Make the chat logs
agent_chat = []
customer_chat = []

# Iterate for the array
for message in chat:
    # If the current speaker is updated
    if message in ['agent', 'customer']:
        # Then update the speaker
        current_speaker = message
        # Skip to the next iteration
        continue

    # Add the message based 
    if current_speaker == 'agent':
        agent_chat.append(message)
    else:
        customer_chat.append(message)

Une autre note à garder à l'esprit est que tout ce système sera fortement dérangé si un client ou un agent décide, pour une raison quelconque, de taper le mot «agent» ou «client».

-1
Xiddoc 15 mars 2021 à 07:30