2014-10-20 61 views
0

我列出的Python的list有这样的数据:如何将第一行数组中的值与第一列中的值匹配来创建json?

Metric, Person1, Person2, Person3, Person4, ... 
Sex|Male, 0.50, 0.75, 0.35,  0.80, ... 
Sex|Female, 0,50, 0.25, 0.65,  0.20, .... 
Age| 18-24, 0.25, 0.20, 0.15,  0.17, ... 

我想创建一个具有以下结构的JSON:

data = [{Person1:[{Sex|Male:0.50}, {Sex|Female:0.50}, {Age|18-24:0.25}]}, {Person2:[{Sex|Male:0.75},{Sex|Female:0.25}, {Age|18-24:0.20}]}, ...] 

我如何能匹配使用Python这些值?

+0

通常PERSON1,PERSON2 ..不列,但线。你确认了吗? – user3378649 2014-10-20 03:04:49

+0

尝试显示是列表的形式。是[[公制,Person1,Person2,Person3,Person4,] ..]还是[[公制,性别|男性,性别|女性,年龄] ..]。我的意思是,你正在采取horozantally还是垂直? – user3378649 2014-10-20 03:09:07

回答

0

如果像你说的,你有一个列表的列表,即

data = [ 
    ['Metric', 'Person1', 'Person2', 'Person3', 'Person4'], 
    ['Sex|Male', 0.5, 0.75, 0.35, 0.8], 
    ['Sex|Female', 0, 50, 0.25, 0.65, 0.2], 
    ['Age| 18-24', 0.25, 0.2, 0.15, 0.17], 
] 

下面将产生所需的输出:

>>> l = zip(*data) # swap rows and columns - it's easier to work this way 
>>> from pprint import pprint 
>>> pprint(l) 
[('Metric', 'Sex|Male', 'Sex|Female', 'Age| 18-24'), 
('Person1', 0.5, 0, 0.25), 
('Person2', 0.75, 50, 0.2), 
('Person3', 0.35, 0.25, 0.15), 
('Person4', 0.8, 0.65, 0.17)] 

>>> result = [] 
>>> for row in l[1:]: 
...  result.append({row[0] : [{l[0][i] : row[i]} for i in range(1, len(row))]}) 

>>> pprint(result) 
[{'Person1': [{'Sex|Male': 0.5}, {'Sex|Female': 0}, {'Age| 18-24': 0.25}]}, 
{'Person2': [{'Sex|Male': 0.75}, {'Sex|Female': 50}, {'Age| 18-24': 0.2}]}, 
{'Person3': [{'Sex|Male': 0.35}, {'Sex|Female': 0.25}, {'Age| 18-24': 0.15}]}, 
{'Person4': [{'Sex|Male': 0.8}, {'Sex|Female': 0.65}, {'Age| 18-24': 0.17}]}] 
0

你有Python列表的列表中,右键?

设列表为数据,列数为Nc,行数为Nr。

列表理解方式:

dict = {data[i][0]:[{data[j][0]:data[j][i]} for j in range(1,Nr)] for i in range(1,Nc)} 

或通过正常的循环:

for i in range(1,Nc): 
    dict[data[i][0]] = [] 
    for j in range(1,Nr): 
    dict.append({data[j][0]:data[j][i]}) 

测试:

>>> l = [[1,2,3],[4,5,6],[7,8,9]] 
>>> dd = {l[0][i]:[{l[j][0]:l[j][i]} for j in range(1,3)] for i in range(1,3)} 
>>> dd 
{2: [{4: 5}, {7: 8}], 3: [{4: 6}, {7: 9}]} 
相关问题