如何将值转换为float并将它们分配给Python中的字典?

时间:2014-02-04 14:23:06

标签: python dictionary list-comprehension

我正在尝试从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

那么,我可以知道我的代码有什么问题吗?

感谢。

4 个答案:

答案 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}