2014-02-02 5 views
0

Я работаю над преобразованием CSV-файла в структурированный Json-файл.Python: Использование Map/Lambda вместо For-Loop

CSV.File

address,type,floor,door 
"1","is","an","example" 
"2","is","an","example" 
"3","is","an","example" 
"4","is","an","example" 
"5","is","an","example" 
"6","is","an","example" 
"7","is","an","example" 

Во-первых, я прочитал файл CSV и перечислить все элементы столбца к спискам.

import pandas as pd 

with open('data.csv', 'rb') as csvfile: 
    reader = csv.reader(csvfile) 
    for row in reader: 
    df = pd.read_csv(csvfile) 
    listAddress= df.address 
    listType= df.type 
    listFloor= df.floor 
    listDoor=df.door 

Для того, чтобы получить список, как это:

listAddress=["1","2","3","4","5","6","7"] 

Теперь я хочу, чтобы автоматизировать этот процесс и сделать список словарей

Output= [] 
tempJson = {"1": 1,"2": "is"} 

for i in range(len(listAddress)): 
    tempJson["Address"]= listAddress[i] 
    tempJson["Type"]= listType[j] 
    Output.(tempJson) 

json.dumps(output) 

Вот проблема, я Я хотел бы сделать список словарей, я могу сделать это в JS, используя карту. Но я не владею Python. Могу ли я упростить этот последний кусок кода с помощью карты

Output: 
[ 
    { 
     "1": 1, 
     "2": "is" 
    }, 
    { 
     "1": 2, 
     "2":"is" 
    }, 
    { 
     "1": 3, 
     "2": "is" 
    },{ 
     "1": 4, 
     "2": "is" 
    }, 
    { 
     "1": 5, 
     "2":"is" 
    }, 
    { 
     "1": 6, 
     "2": "is" 
    }, 
    { 
     "1": 7, 
     "2": "is" 
    } 
] 

ответ

1

Вы можете использовать list comprehension здесь:

>>> from pprint import pprint 
>>> import csv 
>>> with open('data.csv') as f: 
    next(f) #skip the header 
    reader = csv.reader(f, delimiter=',', quotechar='"') 
    d = [{'1':int(row[0]), '2': row[1]} for row in reader] 
...  
>>> pprint(d) 
[{'1': 1, '2': 'is'}, 
{'1': 2, '2': 'is'}, 
{'1': 3, '2': 'is'}, 
{'1': 4, '2': 'is'}, 
{'1': 5, '2': 'is'}, 
{'1': 6, '2': 'is'}, 
{'1': 7, '2': 'is'}] 
0

Простое изменение будет

Output= [] 
tempJson = {"1": 1,"2": "is"} 

for i in range(len(listAddress)): 
    tempJson["Address"]= listAddress[i] 
    tempJson["Type"]= listType[i] 
    Output.append(tempJson.copy()) 

что-то, вероятно, считается более вещий будет:

output = [{"1": 1, "2": "is", "Address": a, "Type": t} 
      for a, t in zip(listAddress, listType)] 
Смежные вопросы