使用嵌套列表创建进行Python CSV导入

时间:2017-10-09 17:43:27

标签: python list dictionary opencsv dataformat

我想简单地将.csv导入Python。我读过很多文件但是对于我的生活,我无法弄清楚如何做到以下几点。

CSV格式如下

NYC,22,55
BOSTON,39,22

我正在尝试生成以下内容:{NYC = [22,55],BOSTON = [39,22]}以便我可以在每个变量的循环中调用i [0]和i [1]。

我试过

import csv
input_file = csv.DictReader(open("C:\Python\Sandbox\longlat.csv"))

for row in input_file:
print(row)

打印我的变量,但我不知道在城市名称中嵌套两个数值并生成我希望得到的列表。

感谢您的帮助,对不起我的菜鸟问题 -

5 个答案:

答案 0 :(得分:5)

使用词典理解:

import csv

with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
    csvread = csv.reader(csvfile)
    result = {k: [int(c) for c in cs] for k, *cs in csvread}

这适用于,并在我的机器上生成:

>>> result
{'NYC': [22, 55], 'BOSTON': [39, 22]}

它也适用于任意数量的列。

如果您使用,您可以使用索引和切片进行序列解包:

import csv

with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
    csvread = csv.reader(csvfile)
    result = {row[0]: [int(c) for c in row[1:]] for row in csvread}

答案 1 :(得分:4)

如果您不熟悉python comprehensions,可以使用以下使用for循环的代码:

import csv

with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
    reader = csv.reader(f)
    result = {}
    for row in reader:
        result[row[0]] = row[1:]

如果您希望数字为字符串,前面的代码有效,如果您希望它们是数字使用:

import csv

with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
    reader = csv.reader(f)
    result = {}
    for row in reader:
        result[row[0]] = [int(e) for i in row[1:]] # float instead of int is also valid

答案 2 :(得分:2)

每行将有3个值。您希望第一个作为键,其余作为值。

>>> row
['NYC','22','55']

>>> {row[0]: row[1:]}
{'NYC': ['22', '55']}

你可以创建整个字典:

lookup = {row[0]: row[1:] for row in input_file}

答案 3 :(得分:1)

你也可以像这样使用熊猫:

import pandas as pd

df = pd.read_csv(r'C:\Python\Sandbox\longlat.csv')

result = {}
for index, row in df.iterrows():
    result[row[0]] = row[1:]

答案 4 :(得分:-2)

这是一个暗示。尝试熟悉str.split(x)函数

 strVar = "NYC,22,55"
 listVar = strVar.split(',') # ["NYC", "22", "55"]
 cityVar = listVar[0]        # "NYC"
 restVar = listVar[1:];      # ["22", "55"]

 # If you want to convert `restVar` into integers
 restVar = map(int, restVar)