我有一个文本文件,其内容是这样的:
A:3
B:5
C:7
A:8
C:6
我需要打印:
A numbers: 3, 8
B numbers: 5
C numbers: 7, 6
我是初学者,所以如果你能提供一些帮助我会很感激。我已经写了一本字典,但这几乎是我所知道的。
答案 0 :(得分:4)
您可以使用将值保存在字典中的方法:
d = {} # create an empty dictionary
for line in open(filename): # opens the file
k, v = line.split(':') # unpack each line in the char before : and after
if k in d: # add the values to the dictionary
d[k].append(v)
else:
d[k] = [v]
这会为您提供一个字典,其中包含您可以用来获取所需输出的格式的文件:
for key, values in sorted(d.items()):
print(key, 'numbers:' ', '.join(values))
sorted
是必需的,因为字典是无序的。
请注意,使用collections.defaultdict
代替普通dict
可以稍微简化一下这种方法。的:
d = {}
...
if k in d: # add the values to the dictionary
d[k].append(v)
else:
d[k] = [v]
然后可以替换为:
from collections import defaultdict
d = defaultdict(list)
...
d[k].append(v)
答案 1 :(得分:0)
简短版本(应按字母顺序排序)
d = {}
lines = [line.rstrip('\n') for line in open('filename.txt')]
[d.setdefault(line[0], []).append(line[2]) for line in lines]
[print(key, 'numbers:', ', '.join(values)) for key,values in sorted(d.items())]
或者,如果您想维护文件(文件顺序)中显示的顺序
from collections import OrderedDict
d = OrderedDict() # Empty dict
lines = [line.rstrip('\n') for line in open('filename.txt')] # Get the lines
[d.setdefault(line[0], []).append(line[2]) for line in lines] # Add lines to dictionary
[print(key, 'numbers:', ', '.join(values)) for key,values in d.items()] # Print lines
使用Python 3.5进行测试。
答案 2 :(得分:-1)
您可以将文件视为csv(逗号分隔值),以便您可以使用csv
模块在一行中解析文件。然后使用defaultdict
在类list
的costructor中输入,以便在密钥不存在时创建它。然后使用OrderedDict
课程,因为标准字典不会保留您的密钥顺序。
import csv
from collection import defaultdict, OrderedDict
values = list(csv.reader(open('your_file_name'), delimiter=":")) #[['A', '3'], ['B', '5'], ['C', '7'], ['A', '8'], ['C', '6']]
dct_values = defaultdict(list)
for k, v in values:
dct_values[k].append(v)
dct_values = OrderedDict(sorted(dct_values.items()))
然后你可以简单地打印迭代字典。 按键分组的一种非常简单的方法是通过外部库,如果您有兴趣尝试PyFunctional