我正在尝试从CSV文件中读取内容并将其存储在字典中。
我的CSV文件的每一行格式为:
'Node_001', '0.0067', '0.2456', '0.7896', ......
第一个元素将用作字典中的键,而其余部分是值。
由于这些值是由excel中的方程式生成的,因此我认为格式本身没有任何问题。
这是我的代码:
with open(path, "rb") as file:
reader = csv.reader(file)
my_dictionary = dict()
for row in reader:
node_id = row[0]
temp_values = row[1:]
[float(x) for x in temp_values]
my_dictionary[node_id] = temp_values
print isinstance(temp_values[0], float)
我打印行的数字部分的第一个元素,以检查它们是否转换为float。但是,我得到的只是False
。
那么,我可以知道我的代码有什么问题吗?
感谢。
答案 0 :(得分:1)
这段代码:
for row in reader:
node_id = row[0]
temp_values = row[1:]
[float(x) for x in temp_values]
my_dictionary[node_id] = temp_values
print isinstance(temp_values[0], float)
使用以下行创建浮点值列表:
[float(x) for x in temp_values]
...但由于它没有分配给任何东西,它会立即消失。
将该行更改为
temp_values = [float(x) for x in temp_values]
创建转换后的列表并将其分配给temp_values
,以便其余代码可以使用这些值。
答案 1 :(得分:1)
第[float(x) for x in temp_values]
行不会修改temp_values,但会创建一个新列表。你必须重新分配它:
with open(path, "rb") as file:
reader = csv.reader(file)
my_dictionary = dict()
for row in reader:
node_id = row[0]
temp_values = row[1:]
temp_values = [float(x) for x in temp_values]
my_dictionary[node_id] = temp_values
print isinstance(temp_values[0], float)
答案 2 :(得分:1)
您没有保存转换:
temp_values = [float(x) for x in temp_values]
如果您将列表理解替换为此列表,那么您的代码应该可以正常工作。
答案 3 :(得分:1)
尝试进行更改,假设您的文件中只有唯一的密钥:
with open(path, 'r') as f:
reader = csv.reader(f)
d = {r[0]:map(float, r[1:]) for r in reader}
print(d)
你也可以坚持使用列表理解:
with open(path, 'r') as f:
reader = csv.reader(f)
d = {r[0]: [float(i) for i in r[1:]] for r in reader}