4

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

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 - 文件到字典?

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

4

4 回答 4

5
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]使用列表索引来处理这些列表中的第二个和第四个值,将它们分配给字典的键和值(d[key] = value)。

于 2012-12-06T19:16:47.107 回答
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用作键检索函数,该函数从每行中获取第二个和第四个值(当用空格分隔时),并使用生成器表达式将其应用于文件中的每一行。

还有一个轻微的优势(尽管通常不是那么重要)应该my_dict = dict(keyvals)失败,然后名称永远不会被绑定,而如果通过按键分配发生某些事情,那么dict声明之外的with声明可能会以“脏”告终。

于 2012-12-06T19:17:26.247 回答
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 上做一些事情。

于 2012-12-06T19:16:36.250 回答
0
for line in f.readlines():
    my_dic[line.split(' ')[1]] = line.split(' ')[3]
于 2012-12-06T19:17:14.423 回答