我知道如果它只有两列,该如何做,但如果文件是这样的话:
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列是我的内容的关键?我在想,解决这个问题的方法是完全删除其他无用的列,这样只剩下我需要的两个,然后我可以使用我在本网站上看到的脚本来制作字典
当然,这是解决问题的方法,非常感谢任何提示。
答案 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]