我有这个文本文件-任务,然后是括号之间的标签-:
Buy a new tablet (@urgent, @finance, @internet)
Pay my rent (@home, @finance, @urgent, @important)
Watch TV (@home, @internet)
Do some exercise (@health, @important)
我如何在Python中获得此文本文件的以下视图:
@finance
Buy a new tablet
Pay my rent
@health
Do some exercise
@home
Pay my rent
Watch TV
@important
Pay my rent
Do some exercise
@internet
Buy a new tablet
Watch TV
@urgent
Pay my rent
我根本不知道如何进行(顺便说一句,这不是家庭作业)。关于删除重复的行有无数的主题,但是我找不到检查此特定问题的主题。
预先感谢
答案 0 :(得分:1)
您要使用每行的第一个单词作为字典的键,并将字典中的关联值设为列表,以便可以将其追加到列表中。没有任何多余的装饰,并且警告未经测试的代码:
mydict = {}
for line in file:
key = line.split(' ')[0]
if key not in mydict:
mydict[key] = [ line ]
else:
mydict[key].append(line)
for key, value in mydict.items() :
print(key)
for line in value:
print( ' ' + line )
print(' ')
有很多方法可以使它变得更短,并且可以说更像Python。我以我认为最简单的方式编写了它,而无需使用任何“附加”,例如使用香草{}
而不是collections
中的任何内容。
注意-问题已更改,没有时间重写此答案。看评论。我希望这对某些人有用。
答案 1 :(得分:1)
这可能不是最有效的方法,但效果很好:
lst = []
with open('filename.txt', 'r') as f:
for line in f:
mid = line.split('(')
all_ats = mid[1][:-1].split(', ')
lst.append((mid[0].strip(), all_ats))
vals = sorted(set(y for x in lst for y in x[1]))
for x in vals:
print(x)
for y, z in lst:
if x in z:
print(f'\t{y}')
'''
@finance
Buy a new tablet
Pay my rent
@health
Do some exercise
@home
Pay my rent
Watch TV
@important
Pay my rent
Do some exercise
@internet
Buy a new tablet
Watch TV
@urgent
Buy a new tablet
Pay my rent
'''