PYTHON:将文件读入字典,其中列n为键,列m为值

时间:2012-12-06 19:14:04

标签: python dictionary

我知道如果它只有两列,该如何做,但如果文件是这样的话:

01 asd 023 green
01 dff 343 blue
02 fdf 342 yellow
02 fff 232 brown
02 kjf 092 green
03 kja 878 blue

并说,我希望第2列成为我的词典的关键,第4列是我的内容的关键?我在想,解决这个问题的方法是完全删除其他无用的列,这样只剩下我需要的两个,然后我可以使用我在本网站上看到的脚本来制作字典

Python - file to dictionary?

当然,这是解决问题的方法,非常感谢任何提示。

4 个答案:

答案 0 :(得分:4)

d = {}
with open('data.txt') as f:
  for line in f:
    tok = line.split()
    d[tok[1]] = tok[3]
print(d)

这会产生

{'kja': 'blue', 'kjf': 'green', 'fdf': 'yellow', 'asd': 'green', 'fff': 'brown', 'dff': 'blue'}

split()(不带参数)将行拆分为字符串列表。 tok[1]tok[3]然后使用list indexing来解决这些列表中的第二个和第四个值,并将它们分配给dictionary的键和值(d[key] = value

答案 1 :(得分:2)

这样的东西
from operator import itemgetter
keyval = itemgetter(1, 3)
with open('file') as fin:
    keyvals = (keyval(line.split()) for line in fin)
    my_dict = dict(keyvals)

备注:

这与@ NPE的答案不同,因为它使用内置dict进行初始化,而不是在循环外声明它。它还使用itemgetter作为键检索函数,它从每一行获取第2和第4个值(当用空格分割时),并使用生成器表达式将其应用于文件中的每一行。

还有一个小优点(虽然通常不那么重要)应该my_dict = dict(keyvals)失败,然后名称永远不会被绑定,而如果通过按键分配键来发生某些事情,那么它可能是{{}在dict语句之外声明的1}}最终“脏”。

答案 2 :(得分:0)

d = {}
with open("file.txt") as f:
    for line in f:
        (key1, val1, key2, val2) = line.split()
        d[int(key1)] = val
        d[int(key2)] = val2

会得到你们所有人。否则,你可以在NPE上做一些事情。

答案 3 :(得分:0)

for line in f.readlines():
    my_dic[line.split(' ')[1]] = line.split(' ')[3]