繁体   English   中英

处理文件读取和字典中某个键的多个值

[英]Handling file reading and multiple values to a key in dictionary

我该如何编码以从文件中读取第一行并将其作为字典的键值,并以迭代方式继续读取下一个值,并将其作为它们落入文件中的特定键的值。 像例子:

Item Quality Cost Place

Ball     1        $12    TX
Umbrella 5        $35    NY
sweater  89       $100   LA

因此,这里是我的文件。 当我阅读时,我希望像粗体中的键那样创建字典,而当我继续阅读低于该数字的行时,我希望它们在各个键中作为多个值显示。

谢谢

看起来您正在描述带有空格定界符的csv文件。 这样的事情应该可以工作( 来自Python帮助 )。

>>> import csv
>>> spamReader = csv.reader(open('eggs.csv', 'rb'), delimiter=' ', quotechar='|')
>>> for row in spamReader:
...     print ', '.join(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam

实际上, csv.DictReader会更好,以便将每一行都作为具有第一行定义的键的字典。

我假设在每组值之后插入一个换行符。

编辑 :使用上面的示例,我们得到:

In [1]: import csv

In [2]: f = csv.DictReader(open('test.txt', 'r'), delimiter = ' ', skipinitialspace = True)

In [3]: for row in f: print row

{'Item': 'Ball', 'Cost': '$12', 'Quality': '1', 'Place': 'TX'}
{'Item': 'Umbrella', 'Cost': '$35', 'Quality': '5', 'Place': 'NY'}
{'Item': 'sweater', 'Cost': '$100', 'Quality': '89', 'Place': 'LA'}

需要将参数skipinitialspace = True传递给DictReader ,以便能够摆脱多个空格而又不会在每一行中创建虚假条目。

给定键不能有“多个值”,但是每个键当然可以有一个列表值。

例如(Python 2.6或更高版本-仅仅是因为我出于通用性考虑使用next函数,而不是诸如readline方法,但是您当然可以对其进行调整!):

def makedictwithlists(f):
    keys = next(f).split()
    d = {}
    for k in keys: d[k] = []
    for line in f:
        for k, v in zip(keys, line.split()):
            d[k].append(v)
    return d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM