我正在尝试阅读此文本文件。
A B C D
1 5 6 7
2 8 9 10
3 .......
4 .......
这封信是作为一行引入的,然后我将所有值作为浮点数引入
with open('file.txt', 'r') as f:
headings = f.readline()
numbers = [float(n) for n in f.read().split()] #read values to the 'numbers' as a list
print numbers
所以我有一个很长的所有整数列表。
但我想要这种格式的字典:
my_dict( { 1: [5,6,7], 2:[8,9,10] } )
所以第一列文件编号是键,其余的是与其各自键相关的列表。
我将每个第4个值设置为带循环的键,但是如何轻松地将其余值作为列表放入相应的键中。
答案 0 :(得分:4)
mydict = {}
with open('file.txt', 'r') as f:
headings = f.readline()
for row in f:
row = row.split()
key = row[0]
vals = row[1:]
mydict[key] = vals
那样的东西?或者我错过了理解你想要的结果?
由于你没有使用实际的标题A B C D ...
,我不打算尝试用它们做些什么,所以我会保留你的解决方案。
你还写了一些名为my_dict
(?)的类,我不会尝试使用它,因为我不知道它到底是什么。
如果您需要在输出中使用整数值,只需执行以下操作:
row = row.split()
row = list(int(n) for n in row)
答案 1 :(得分:0)
可以使用numpy loadtxt
或genfromtxt
进行阅读。要创建字典,我更喜欢dictionary comprehension。
请注意,我使用逗号作为示例文件的分隔符。
dtypes
function pageLoad(callback) {
if ("function" == typeof callback) {
if (document.addEventListener) { // Event that fires when the initial HTML document has been completely loaded and parsed
document.addEventListener("DOMContentLoaded", callback, false);
} else if (window.attachEvent) { // For IE 8 and below
window.attachEvent("onload", callback);
} else if ("function" == typeof window.onload) { // Event that fires when the page has fully loaded including images / scripts etc
var o = window.onload;
window.onload = function() {
o();
callback();
};
} else {
window.onload = callback;
}
}
}
当然可以根据您的要求进行修改。
答案 2 :(得分:0)
你可以这样做:
i = iter(numbers)
print [{r[0]: list(r[1:]) for r in zip(i,i,i,i)}]
答案 3 :(得分:0)
您可以使用带有生成器表达式的csv module和dict
轻松完成此操作:
import csv
with open('file.txt', 'r') as f:
next(f) # skip header
r = csv.reader(f, delimiter=" ")
d = dict((int(row[0]), map(int,row[1:])) for row in r)
print(d)
{1: [5, 6, 7], 2: [8, 9, 10]}
如果您有重复键,那么您将需要另一种方法,否则您将丢失数据,collections.defaultdict将处理重复:
import csv
from collections import defaultdict
with open('file.txt', 'r') as f:
next(f)
d = defaultdict(list)
r = csv.reader(f,delimiter=" ")
for row in r:
d[row[0]].extend(map(int,row[1:]))
如果你想在自己的dict中每四行使用一次,你可以在csv.reader对象上使用itertools.islice:
import csv
from itertools import islice
with open('file.txt', 'r') as f:
next(f) # skip header
r = csv.reader(f, delimiter=" ")
out = []
for row in iter(lambda: list(islice(r, 4)),[]):
out.append(dict((int(r[0]), map(int,r[1:])) for r in row ))
适用于:
A B C D
1 5 6 7
2 8 9 10
5 5 6 7
6 8 9 10
1 2 3 4
2 2 2 2
3 3 3 3
4 4 4 4
将输出:
[{1: [5, 6, 7], 2: [8, 9, 10], 5: [5, 6, 7], 6: [8, 9, 10]}, {1: [2, 3, 4], 2: [2, 2, 2], 3: [3, 3, 3], 4: [4, 4, 4]}]
你可以把它全部放在一个列表comp:
out = [dict((int(r[0]), map(int,r[1:])) for r in row)
for row in iter(lambda: list(islice(r, 4)),[])]
答案 4 :(得分:0)
因为你需要在浮动中,如果你想知道如何在字典理解中做到这一点
这个答案只是对Torexed的答案的修改
with open('file.txt', 'r') as f:
headings = f.readline()
mydict={float(row[0]):[float(i) for i in row[1:]] for row in (rows.split(',') for rows in f)}
print mydict