2014-02-28 47 views
2
12245933,1418,1 
12245933,1475,2 
134514060,6112,3 
134514064,10096,4 
12245933,1536,5 
... 
134514097,16200,38 
12245933,1475,39 

多個密鑰我想知道每row[0],同樣價值的再一次出現在row[1]字典與蟒蛇

的距離。例如:

12245933 has the value 1475 in line 39 and line 2 .. 
i want to know all the possible occurrences of 1475 for 12245933 in a file. 

代碼我試過了。

#datafile parser 
def parse_data(file): 
    pc_elements = defaultdict(list) 
    addr_elements = defaultdict(list) 
    with open(file, 'rb') as f: 
     line_number = 0 
     csvin = csv.reader((x.replace('\0','') for x in f), delimiter = ',') 
     for row in csvin: 
      try: 
       pc_elements[int(row[0])].append(line_number) 
       addr_elemets[int(row[1])].append(line_number) 
       line_number += 1 
      except: 
       print row 
       line_number += 1 
       pass 

也許我們可以添加行[1]以及在pc_elements字典嗎?並從中獲得索引?

+0

字典不能有重複鍵。 – sashkello

+0

除了使用列表之外還有其他方法嗎?隨着尺寸的增加,清單需要很長時間才能處理。 – pistal

+0

我假設第一列是'id'種,然後你有這個ID的數據。你可以創建一個以id爲鍵的字典,值將是表示你的數據的元組列表,即{12245933:[(1418,1),(1475,2)]}等 – sashkello

回答

5

使用tuple S作爲你的字典鍵:

In [63]: d=''' 
    ...: 12245933,1418,1 
    ...: 12245933,1475,2 
    ...: 134514060,6112,3 
    ...: 134514064,10096,4 
    ...: 12245933,1536,5 
    ...: 134514097,16200,38 
    ...: 12245933,1475,39 
    ...: ''' 

In [64]: from collections import defaultdict 
    ...: dic=defaultdict(list) 
    ...: for l in d.split(): 
    ...:  tup=tuple(int(i) for i in l.split(',')) 
    ...:  dic[tup[:2]].append(tup[2]) 

In [65]: dic[(12245933, 1475)] 
Out[65]: [2, 39] 
+0

這將無法給只存在唯一的元組? – pistal

+0

@pistal什麼?不知道你是什麼意思 – zhangxaochen

+0

對不起 - 我的壞。 – pistal

1

使用嵌套的字典。將1224953映射到一個字典,該字典將1475映射到值出現的行號列表。

因此,最終的字典看起來像{1224953 => {1475 => [39,2]}}