【问题标题】:Convert data based on multiple dictionaries基于多个字典转换数据
【发布时间】:2015-11-18 14:39:04
【问题描述】:

我有一个数据矩阵(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]]

【问题讨论】:

  • 你能展示你的数据和字典的样本吗?你得到了什么,你期望什么?
  • 我想 data 不是一个列表,而是一个 numpy.array (否则它没有形状)
  • 你是对的。我忘了提那个。但我没有收到任何类型的错误,结果是唯一的错误。
  • 一般建议:考虑使用 pandas 来完成此类任务。 pandas 引入了数据框,它对于许多任务来说是非常有用的数据结构。我认为熊猫解决方案会在几个月过去后更好地理解......

标签: python numpy dictionary


【解决方案1】:

如果有的话,

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]

【讨论】:

  • 工作得很好!我仍然是 Python 的初学者,所以用一行代码就完成了这项工作真是令人难以置信。
  • 确实,列表推导可以很强大。快乐编码:-)
【解决方案2】:
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 遍历二维数组。使用 col 循环变量获取所需的字典,并通过使用 row 和 col 来获取数据值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 2019-07-23
    • 2020-11-06
    • 2019-01-14
    • 1970-01-01
    • 2022-07-05
    • 2016-12-28
    • 2022-01-25
    相关资源
    最近更新 更多