在元组中查找与名称对应的消息 Python

Find messages corresponding to a name in a tuple Python

我有一个任务,我在一个函数中读取一个文件,其中包含不同人之间的聊天记录。聊天看起来像这样:

Anna
Hello Everyone
Kalle
Hi there
Anna
Coffee break?
Pelle
Absolutely
Kalle
Sure
Anna
Great, see you downstairs in 5 minutes

我创建了一个函数,为名称和相应的消息创建元组,一个元组中有两行。它看起来像这样:

[('Anna', 'Hello Everyone'), ('Kalle', 'Hi there'), ('Anna', 'Coffee break?'), 
('Pelle', 'Absolutely'), ('Kalle', 'Sure'), ('Anna', 'Great, see you downstairs in 5 minutes')]

所以,我现在想做的是创建另一个函数来查找属于例如安娜。因此,如果我在 运行 程序时输入“Anna”作为输入,我希望函数找到 Anna 写的所有消息,然后输出应该如下所示:

[Anna] --> Hello Everyone
[Anna] --> Coffee break?
[Anna] --> Great, see you downstairs in 5 minutes

有人知道我该如何解决这个问题吗?我已经尝试了不同的代码来在元组中找到我想要的东西,但不幸的是它不起作用。

简单循环?

l = [('Anna', 'Hello Everyone'), ('Kalle', 'Hi there'), ('Anna', 'Coffee break?'), 
('Pelle', 'Absolutely'), ('Kalle', 'Sure'), ('Anna', 'Great, see you downstairs in 5 minutes')]

def find_by_name(name, l):
    for msg in l:
        if msg[0] == name:
            print(f"[{name}] --> {msg[1]}")

find_by_name('Anna', l)

给出:

[Anna] --> Hello Everyone
[Anna] --> Coffee break?
[Anna] --> Great, see you downstairs in 5 minutes

这是一个简单的理解:遍历列表对。筛选出您想要的人名的消息。

[msg for person, msg in l if person == name]

如果您想要一个要求用户输入的程序,这里有一个选项。到目前为止,所有这些答案都非常相似。

您可以遍历列表中的元组,然后索引元组。如果 tpls 是您的 (name,msg) 对列表,那么 tpls[0] 会给您第一个元组。 tpls[0][0] 会在第一个元组中给出名称,tpls[0][1] 会在第一个元组中给出消息。

def find_msg(tpls):
    name = input()
    for tpl in tpls:
        if tpl[0] == name:
            print("[{}] -->".format(name),tpl[1])

find_msg(tpls)