2013-08-23 56 views
-1

我有60個記錄,有一列「skillsList」「(」skillsList「是一個技能列表)和」IdNo「 我想知道有多少」IdNo's「有一個技能的共同點。在python列表中的tems上分組

我該怎麼辦呢Python編寫的。我不知道如何把一個特定的列表項的計數。希望得到任何幫助。

>>> a = open("C:\Users\abc\Desktop\Book2.csv") 
>>> type(a1) 
<type 'str'> 

一些文字的時候我打印a1

>>> a1 
'IdNo, skillsList\n1,"u\'Training\', u\'E-Learning\', u\'PowerPoint\', u\'Teaching\', u\'Accounting\', u\'Team Management\', u\'Team Building\', u\'Microsoft Excel\', u\'Microsoft Office\', u\'Financial Accounting\', u\'Microsoft Word\', u\'Customer Service\'"\n2,"u\'Telecommunications\', u\'Data Center\', u\'ISO 27001\', u\'Management\', u\'BS25999\', u\'Technology\', u\'Information Technology...\', u\'Certified PMP\\xae\', u\'Certified BS25999 Lead...\'"\n3,"u\'Market Research\', u\'Segmentation\', u\'Marketing Strategy\', u\'Consumer Behavior\', u\'Experience Working with...\'" 

謝謝

+0

是做什麼用的結構保存列? –

+0

你可以展示一些你到目前爲止得到的代碼的例子嗎? (你的「記錄」是什麼?它們是字典中的關鍵字還是列表或其他內容?)或者給出一些你迄今爲止嘗試過的以及它如何變得糟糕的代碼示例? – usethedeathstar

回答

0

你必須自己做。你可以使用一個技能詞典,每一個dic beeing的項目都歸零。然後遍歷您的記錄並在看到時增加技能項目。

0
struct = [{id: 1, skills: ['1', '2', '3']}, {...}] 
for el in struct: 
    if '1' in el.get('skills'): 
     print 'id %s get this skill' % el.get('id') 
0

您可以構建一個倒排技能索引。所以,你建立一個字典,每個鍵作爲一個技能名稱,而鍵的值是一組IdNo。這樣,你也可以找出哪些IdNo我們有一些一套技能

的代碼看起來像

skills = {} 
with open('filename.txt') as f: 
    for line in f.readlines(): 
     items = [item.strip() for item in line.split(',')] 
     idNo = items[0] 
     skill_list = items[1:] 
     for skill in skill_list: 
      if skill in skills: 
       skills[skill].add(idNo) 
      else: 
       skills[skill] = set([idNo, ]) 

現在你有skills字典這看起來像

skills = { 
    'Training': set(1,2,3), 
    'Powerpoint': set(1,3,4), 
    'E-learning': set(9,10,11), 
    ....., 
    ....., 

} 

現在你看到1,3,4有Powerpoint作爲一種技能,如果你想知道idNo誰同時具有「訓練」和「Powerpoint」技能,你可以做

skills['Powerpoint'].intersection(skills['Training']) 

,如果你想知道誰idNo要麼「培訓」或「簡報」技巧,你可以做

skills['Powerpoint'].union(skills['Training'])