搜尋

首頁  >  問答  >  主體

Python中怎麼實作1:n:1的資料結構?

首先有大量的數據,數據的分成3個單元組成:

类型    第一个值    第二值

例如現在有100條這樣的資料。如何處理呢?
第一步
我的想法是透過字典建構1:n:1。
但是,現在情況是。如果類型為key的話,那麼如果有相同類型要怎麼處理?因為字典的key是唯一的。

第二步的情況是,我要透過第一個值來取得第二值。我要怎麼才能在不知道第一個值的情況下透過第一個值來取得第二個值?

謝謝! ~


可能表達不清楚,我舉例說明1:n:1的
例如有兩個資料是這樣的

        类型        第一个值        第二个值
 (1)   zhangsan   2017-01-01     是的我来了
 (2)   zhangsan   2017-05-01     我要走了

然後我想要組成這樣的東西:

    'zhangsan':{{'2017-01-01': '是的我来了'},{'2017-05-01':'我要走了'}}

這是我想要的結果。
也就是說。 1:n:1表示 類型:第一個值:第二個值
#不知道有沒有可行的方案

怪我咯怪我咯2745 天前762

全部回覆(3)我來回復

  • 为情所困

    为情所困2017-05-18 10:57:26

    第一個: 如果在同一類型前提下, 第一個值是唯一的話, 那麼可以試下下面的結構:

    value = '1:n:1'
    mapping = defaultdict(dict)
    value_type, fir_val, sec_val = value.split(':')
    mapping = {
        value_type: {
            fir_val: sec_val 
        }
    }

    上面的意思就是, 創建一個預設值為字典的字典mapping, 然后用类型第一个值分别作为索引的key, 我个人觉得, 在类型第一个值的共同约束下, 找到的第二个值應該是唯一的, 如果不是唯一的, 那麼就要考慮是否覆蓋, 還是以列表的形式存在

    第二個:
    如果你採用我上面的資料結構, 那麼你在不知道第一個值的前提下, 只能遍歷mapping[value_type], 然後判斷值是否你想要的

    回覆
    0
  • 迷茫

    迷茫2017-05-18 10:57:26

    這個1:n:1 是什麼意思?映射關係嗎?不過這個並不重要,我有一個簡單粗暴的方法就是每條數據寫成一個3元組(type,val1,val2),然後把每條數據都存到數組裡[];
    在構建數組的時候做3個dict,typeDict = {type:[arrIdx]},val1Dict={val1:[arrIdx]},val2Dict={val2:[arrIdx]}
    當要用type查找資料的時候就從typeDict從尋找所有與type對應的記錄位置。
    同理val1和val2一樣。
    當要查找typeA,val1=n的時候只需要把從typeDict,val1Dict查出的結果集做交集就好了。

    回覆
    0
  • 某草草

    某草草2017-05-18 10:57:26

    如果大量數據,似乎應該是用資料庫例如mysql或是pandas這樣專門處理數據的包會效率更高啊。 pandas還有專門to_dict的函數。

    回覆
    0
  • 取消回覆