基于初始字符分析字符串的重复行

2024-10-04 01:33:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python处理列表和字符串。我有以下几行线。你知道吗

ID abcd  
AC efg  
RF hij  
ID klmno  
AC p  
RF q  

我希望输出为:

abcd, efg, hij
klmno, p, q  

此输出基于行中的前两个字符。我怎样才能有效地实现它?你知道吗

我希望为ID标记之间的每个条目输出行的第二部分。你知道吗


Tags: 字符串标记id列表条目字符acabcd
3条回答

您可以使用下面的方法,它考虑了顺序,这样转置dict的值就更有意义了。。。你知道吗

from collections import OrderedDict

items = OrderedDict()
with open('/home/jon/sample_data.txt') as fin:
    lines = (line.strip().partition(' ')[::2] for line in fin)
    for key, value in lines:
        items.setdefault(key[0], []).append(value)

res = [', '.join(el) for el in zip(*items.values())]
# ['abcd, efg, hij', 'klmno, p, q']

我在解析问题时遇到了一点问题,但根据我的猜测,这应该可以满足您的要求:

all_data = " ".join([line for line in file]).split("ID")
return [", ".join([item.split(" ")[::2] for item in all_data])]

基本上你要做的是先把所有的数据连接在一起(去掉换行符),然后在关键字“ID”上拆分

在那之后,如果我正确地解释了这个问题,你会得到每一对的第二个值。这些对是用空格分隔的(由于第一行中的“.”join,所以该项中的所有内容都是空格分隔的),所以我们只需一步一步地遍历该列表,抓取其他所有项。你知道吗

一般来说,split的语法糖分比通常使用的要多一点,完整的语法是:[开始:结束:step],所以[::2]只返回其他项。你知道吗

使用default dict

from collections import defaultdict
result = defaultdict(list)
for line in lines:
    split_line = line.split(' ')
    result[split_line[0]].append(split_line[1])

这将为您提供一个字典结果,用于存储数组中具有相同键的所有值。要获取以ID开头的行中的所有字符串,请执行以下操作:

print result[ID]

相关问题 更多 >