使用python中的行内的键从csv文件创建字典

时间:2015-01-24 04:21:11

标签: python dictionary

如果密钥是每行中的最后一个索引(index[9]),我将如何使用csv文件创建字典。例如:

,,,,,,,,,KEY_1
,,,,,,,,,KEY_1
,,,,,,,,,KEY_1
,,,,,,,,,KEY_2
,,,,,,,,,KEY_2
,,,,,,,,,KEY_2
,,,,,,,,,KEY_3
,,,,,,,,,KEY_3
,,,,,,,,,KEY_3

有没有办法创建一个如下所示的字典:

dictt = {
        'KEY_1':[,,,,,,,,], [,,,,,,,,], [,,,,,,,,],
        'KEY_2':[,,,,,,,,], [,,,,,,,,], [,,,,,,,,],
        'KEY_3':[,,,,,,,,], [,,,,,,,,], [,,,,,,,,],
        }

我只有6个自学蟒蛇,我正在研究成长的痛苦。任何帮助是极大的赞赏。先谢谢你了

2 个答案:

答案 0 :(得分:3)

在回答您的“可能”问题时,必须说“不完全”,因为没有 Python构造符合您显示的语法:

dictt = {
    'KEY_1':[,,,,,,,,], [,,,,,,,,], [,,,,,,,,],
    'KEY_2':[,,,,,,,,], [,,,,,,,,], [,,,,,,,,],
    'KEY_3':[,,,,,,,,], [,,,,,,,,], [,,,,,,,,],
    }

输入此内容将导致语法错误,代码可构建等效代码。

但如果你的意思是,例如,

dictt = {
    'KEY_1':[['','',,,,,,,], [,,,,,,,,], [,,,,,,,,]],
    'KEY_2':[[,,,,,,,,], [,,,,,,,,], [,,,,,,,,]],
    'KEY_3':[[,,,,,,,,], [,,,,,,,,], [,,,,,,,,]],
    }

(等等将每个,,替换为某些内容,例如一个空字符串 - 不会花很长时间编辑它来修复它! - ),然后肯定,它 可能。

E.g:

import collections
import csv

dictt = collections.defaultdict(list)

with open('some.csv') as f:
    r = csv.reader(f)
    for row in r:
        dictt[r[-1]].append(r[:-1])

完成此操作后,dictt将成为collections.defaultdictdict的子类)的实例,但您可以将其用作dict。或者,如果你绝对坚持它是dict而不是它的子类(虽然没有可能的理由这么坚持),请跟进

dictt = dict(dictt)

瞧,它被转换了: - )

答案 1 :(得分:1)

另一种方式:

txt='''\
,,,,,,,,,KEY_1
,,,,,,,,,KEY_1
,,,,,,,,,KEY_1
,,,,,,,,,KEY_2
,,,,,,,,,KEY_2
,,,,,,,,,KEY_2
,,,,,,,,,KEY_3
,,,,,,,,,KEY_3
,,,,,,,,,KEY_3
'''

import csv

result={}
for line in csv.reader(txt.splitlines()):
    result.setdefault(line[-1], []).append(line[:-1])

>>> result
{'KEY_1': [['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '']], 'KEY_3': [['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '']], 'KEY_2': [['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '']]}