grep或在元组中搜索字符串 - python

问题描述 投票:1回答:2

我是python的新手,我正试图弄清楚如何从元组或列表中执行grep。

我有一个像这样的查询结果:

[(123456, '123_ABC', 'abc123defa', '/path/whatever', 11111L, 'YES'),
(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111H, 'NO'),
(234567, '123_GHI', 'abc123defc', '/path/whatever/1', 11111T, 'NO')]

查询的结果有多行,如上例所示。用户输入他正在寻找的“grep”字符串,让我们说“789456”,因此结果应该只打印:

789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111H, 'NO'

也许,平面文本没有引号并以“|”分隔(我不知道我以后真的可以处理那件事)。

所以我的问题是,我是否应该首先将元组更改为列表然后尝试创建一个函数来执行“grep”?如果我把它作为一个元组并且从那里做“grep”,它是一样的吗?我正在寻找一些没有循环数据的东西。

python list grep tuples
2个回答
0
投票

只需保持具有789456的行与列表理解:

queries = [(123456, '123_ABC', 'abc123defa', '/path/whatever', '11111L', 'YES'),
          (789456, '123_DEF', 'abc123defb', '/path/whatever/0', '11111H', 'NO'),
          (234567, '123_GHI', 'abc123defc', '/path/whatever/1', '11111T', 'NO')]

to_keep = 789456

print([query for query in queries if to_keep in query])
# [(789456, '123_DEF', 'abc123defb', '/path/whatever/0', '11111H', 'NO')]

或者与filter()

list(filter(lambda x: to_keep in x, queries))

1
投票

您可以使用in来检查值是否在元组中。

例如:

d = [(123456, '123_ABC', 'abc123defa', '/path/whatever', 11111, 'YES'),(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111, 'NO'),(234567, '123_GHI', 'abc123defc', '/path/whatever/1', 11111, 'NO')]

for i in d:
    if 789456 in i:
        print i

输出:

(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111, 'NO')
© www.soinside.com 2019 - 2024. All rights reserved.