3

我有每个 x 元素的三个列表:

stat = ["A","B","C"]
X = [1,2,3]
Y = [10,15,20]

不,我想从列表中创建字典,其中“stat”应该是键,X 和 Y 是存储在每两个元素的列表中的值对。结果可能如下所示:

my_dict = {
    "A" : [1,10],
    "B" : [2,15],
    "C" : [3,20]
}

或者甚至可以是一个嵌套的字典,这样我就可以用 my_dict["A"]["X"] 来索引它。

或者有没有其他方法可以在 python 中获取“命名数组”?

因为我有第二个问题与第一个问题非常相关,所以我只是在此处添加它而不是打开一个新问题:

我非常习惯于 R 的数组。因此我的问题是:在 python 中有没有类似命名数组的东西?例如,我有两个列表代表我的列名和行名:

columns = ["A","B","C"], rows = ["row_a","row_b","row_c"]

现在我想从这两个列表中创建一个数组:

my_array = columns x rows

我想用如下名称索引:

my_array["A","row_b"]

并在循环中为“单元格”(填充数组)赋值。

是否有可能在 python 中以简单的方式做这些事情?可能最好使用字典来使用字符串索引来完成此操作。

4

3 回答 3

7
>>> stat = ["A","B","C"]
>>> X = [1,2,3]
>>> Y = [10,15,20]
>>> dict(zip(stat, map(list, zip(X, Y))))
{'A': [1, 10], 'C': [3, 20], 'B': [2, 15]}
于 2012-08-08T10:33:33.417 回答
3

生成器表达式规则:

dict((key, [v1,v2]) for key, v1, v2 in zip(stat, X, Y))
于 2012-08-08T10:38:13.977 回答
3
>>> stat = ["A","B","C"]
>>> X = [1,2,3]
>>> Y = [10,15,20]
>>> {s:[x,y] for s,x,y in zip(stat, X, Y)}
{'A': [1, 10], 'C': [3, 20], 'B': [2, 15]}

能够使用my_dict["A"]["X"]它略有不同。

>>> {s:{'X':x, 'Y':y} for s,x,y in zip(stat, X, Y)}
{'A': {'Y': 10, 'X': 1}, 'C': {'Y': 20, 'X': 3}, 'B': {'Y': 15, 'X': 2}}

Python3 语法优于第一种方式:

>>> stat = ["A","B","C"]
>>> X = [1,2,3]
>>> Y = [10,15,20]
>>> {k:v for k,*v in zip(stat, X, Y)}
{'A': [1, 10], 'C': [3, 20], 'B': [2, 15]}
于 2012-08-08T10:37:29.657 回答