簡體   English   中英

創建按字符串索引的python 2d數組

[英]Create python 2d array indexed by string

(我不太擅長使用p​​ython,因此如果這是一個愚蠢的問題,請原諒我)

所以我想創建一個表示這種情況的數據結構-

      word1   word2
word3   1      2
word4   3      4

現在我已經嘗試做這樣的事情-

self.table = [][]

但這給了我一個無效的語法錯誤(我想是因為我還沒有初始化數組?)。 但是,即使我要使用它,也將無法使用它,因為我不知道我的x和y尺寸有多大(似乎會有索引異常數組)。

我應該使用雙重字典嗎? 我應該使用什么?

這個想法是創建一個字典,將字符串映射到索引。 在下面的代碼中,有一個小類可以重載'[]'運算符:

class ArrayStrIdx:
    """ 2D Array with string as Indeces

    Usage Example::

        AA = ArrayStrIdx()
        AA["word1", "word3"] = 99
        print(AA["word2", "word5"])
    """

    cols ="word1 word2"
    rows ="word3 word4 word5"

    dd = [[10,11,12],[20,21,22]]  # data

    def __init__(self):
        """ Constructor builds dicts for indexes"""
        self.ri = dict([(w,i) for i,w in enumerate(self.rows.split())])
        self.ci = dict([(w,i) for i,w in enumerate(self.cols.split())])

    def _parsekey(self, key):
        """ Convert index key to indeces for ``self.dd`` """
        w0, w1 = key[0], key[1]
        return self.ci[w0], self.ri[w1]

    def __getitem__(self, key):
        """ overload [] operator - get() method"""
        i0, i1 = self._parsekey(key)
        return self.dd[i0][i1]

    def __setitem__(self, key, value):
        """ overload [] operator -  set() method """
        i0, i1 = self._parsekey(key)
        self.dd[i0][i1] = value

更新:擴展答案以允許類似AA["word1", "word3"] = 23

也許您可以嘗試使用初始化表

self.table = {r : { c : 0 for c in ['word1', 'word2']} for r in ['word3', 'word4']}

然后您可以通過以下方式訪問每個職位

self.table['word3']['word1'] = 2

Python沒有創建二維矩陣的現成指令,但是使用列表推導很容易做到這一點:

matrix = [[0] * cols for i in range(rows)]

然后您可以使用

matrix[row][col] += 42

假設rows=10cols=20row索引必須從0到9, col索引必須從0到19。 例如

matrix[-1][-1] = 99

將最后一個單元格設置為99

如果您不反對使用外部庫,則可以簽出

熊貓數據框

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM