如何从文件中打印值?

时间:2017-07-12 22:58:32

标签: python dictionary

我有一个文本文件,其内容是这样的:

A:3
B:5
C:7
A:8
C:6

我需要打印:

A numbers: 3, 8
B numbers: 5
C numbers: 7, 6

我是初学者,所以如果你能提供一些帮助我会很感激。我已经写了一本字典,但这几乎是我所知道的。

3 个答案:

答案 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