根据多个词典转换数据

时间:2015-11-18 14:39:04

标签: python numpy dictionary

我有一个数据矩阵(106行和57列),其中所有数据都是['a','c','g','t'],每列也有1个字典。我需要做的是根据自己的字典对每列应用转换。

我试过这样的事,但结果不正确。

result = []
for x in range(data.shape[0]):
    individual_map = np.empty(data.shape[1], dtype=int)

    for y in range(data.shape[1]):
        for key, val in mapping[y].items():
            individual_map[data[x,y] == key] = val

    result.append(individual_map)

感谢。

编辑:示例数据只有3列,所以我只有3个词典。在实际案例中,有57列和57个词典。 样本数据:

data = [['a','c','g'],['t','g','c']]
dictionaries = [{'a':1,'c':2,'g':3,'t':4},{'a':3,'c':1,'g':2,'t':4},{'a':2,'c':3,'g':4,'t':1}]
result = [[1,1,4],[4,2,3]]

2 个答案:

答案 0 :(得分:3)

如果有,

data = [['a','c','g'],['t','g','c']]
dictionaries = [{'a':1,'c':2,'g':3,'t':4},{'a':3,'c':1,'g':2,'t':4},{'a':2,'c':3,'g':4,'t':1}]

,预期结果是

result = [[1,1,4],[4,2,3]]

你可以通过两个嵌套列表推导(https://docs.python.org/2/tutorial/datastructures.html)得到它:

result = [[dictionaries[j][item] for j, item in enumerate(row)] for row in data]

答案 1 :(得分:0)

def data():
data = [['a','c','g'],['t','g','c']]
dictionaries = [{'a':1,'c':2,'g':3,'t':4},{'a':3,'c':1,'g':2,'t':4},{'a':2,'c':3,'g':4,'t':1}]

result = []
for row in range(0, len(data)):
    temp = [0]* len(data[0])
    for col in range(0, len(data[0])):
        temp[col] = (dictionaries[col])[data[row][col]]
    result.append(temp)
print result

使用row,col遍历2D数组。使用col循环变量来获取所需的字典,并通过使用row和col来获取数据值。