列表到词典 - 键

时间:2016-07-17 08:03:13

标签: python-2.7 csv dictionary

我对编码和寻求以下指导非常陌生......

我的csv输出目前是这样的:

'Age, First Name, Last Name, Mark'  
'21, John, Smith, 68'  
'16, Alex, Jones, 52'  
'42, Michael, Carpenter, 92 '

如何创建最终看起来像这样的字典:

dictionary = {('age' : 'First Name', 'Mark'), ('21' : 'John', '68'), etc}

我希望第一个值成为关键 - 并且只想要另外两个值,而我很难找到解决这个问题的方法。

到目前为止我已经

data = open('test.csv', 'r').read().split('\n')

我试图将每个部分分成一个字符串

for row in data:  
     x = row.split(',')

编辑:

感谢那些为解决我的问题提供了一些帮助的人。

使用后

myDic = {}
for row in data:
    tmpLst = row.split(",")
    key = tmpLst[0]
    value = (tmpLst[1], tmpLst[-1])
    myDic[key] = value

我的数据是

['Age', 'First Name', 'Last Name', 'Mark']
['21', 'John', 'Smith', '68']
['16', 'Alex', 'Jones', '52']
['42', 'Michael', 'Carpenter', '92']

但是得到一个IndexError:list index超出范围

value = (tmpLst[1], tmpLst[-1])

即使我可以看到它应该在索引的范围内。

有谁知道为什么会出现这个错误或需要更改什么?

2 个答案:

答案 0 :(得分:1)

假设实际有效的CSV文件如下所示:

Age,First Name,Last Name,Mark
21,John,Smith,68
16,Alex,Jones,52
42,Michael,Carpenter,92

以下代码应该执行您想要的操作:

from __future__ import print_function
import csv

with open('test.csv') as csv_file:
    reader = csv.reader(csv_file)

    d = { row[0]: (row[1], row[3]) for row in reader }

print(d)

# Output:
# {'Age': ('First Name', 'Mark'), '16': ('Alex', '52'), '21': ('John', '68'), '42': ('Michael', '92')}

如果d = { row[0]: (row[1], row[3]) for row in reader }令人困惑,请考虑以下方法:

d = {}
for row in reader:
    d[row[0]] = (row[1], row[3])

答案 1 :(得分:1)

我猜你想要这样的输出:

字典= {'年龄' :('名字','马克')} 然后您可以使用以下代码:

myDic = {}
for row in data:
    tmpLst = row.split(",")
    key = tmpLst[0]
    value = (tmpLst[1], tmpLst[-1])
    myDic[key] = value