2013-03-12 38 views
0

一些和相關價值的發病率我有兩個列出的長度是相同的:計數兩個同步列表

alist = ['XX', 'HH', 'GG', 'XX', 'II', 'PP', 'LL', 'TT', 'KK', 'XX'] 
blist = [2, 3, 5, 5, 9, 8, 9, 4, 7, 2] 

我想知道ALIST有blist相同數量的什麼值。我希望結果如下所示:

2 = XX; 3 = HH; 5 = GG,XX; 9 = II,LL; 8 = PP; 4 = TT; 7 = KK

我解決這樣的:

from collections import defaultdict 
adict = {} 
a = zip(blist, alist) 
for key, value in a: 
    adict.setdefault(k, []).append(v) 

其給出這樣的結果: adict:

{2: ['XX', 'XX'], 3: ['HH'], 4: ['TT'], 5: ['GG', 'XX'], 7: ['KK'], 8: ['PP'], 9: ['II', 'LL']} 

,但我不想兩次相同的值,例如2:[」 XX','XX'] - 我想有2:['XX']。

I tried this using 'set' before the list of values: 
a = zip(blist, alist) 
for key, value in a: 
    a.setdefault(k, set[]).append(v) 

但它抱怨... 任何想法?

回答

2

我個人使用的Martijn的defaultdict的做法,但我想我會解決你目前的嘗試中的問題。

與您的代碼的問題:

a = zip(blist, alist) 
for key, value in a: 
    a.setdefault(k, set[]).append(v) 

是:

  • zip後,a現在是一個列表,所以它不會支持.setdefault
  • k不使用在for循環中 - 應該是key
  • v未使用for循環=應該value
  • set[]無效synatx - 創建一個新的set - 使用set()
  • 一個set不具有.append - 而不是你想用add

更正後的代碼:

d = {} 
a = zip(blist, alist) 
for key, value in a: 
    d.setdefault(key, set()).add(value) 

適應下面根據需要打印:

for k, v in d.iteritems(): 
    if k > 5: 
     print '{0}: {1}'.format(k, ','.join(v)) 
+0

很酷:)但是當我打印出這個文件,它也打印'集',如:2:set(['XX'] ),3:set(['HH'])等。爲什麼打印'set'? – edg 2013-03-12 15:54:13

+0

迭代它取鑰匙,價值和格式那些你想要的事先 – 2013-03-12 15:56:15

+0

f.ex.如果我這樣做: 如果鍵:> 如果鍵> 5: 打印鍵,d [鍵]鍵中d.keys(): 如果鍵> 5: 打印鍵,d [鍵] 我得到: 7:組([ 'KK']) 8:組([ 'PP']) 9:組([ 'II', 'LL']) 如何將我得到: 7:'KK' 8:'PP' 9:'II','LL' – edg 2013-03-12 15:58:30

2

使用您導入,而是以其他方式忽略defaultdict類型:

from collections import defaultdict 

a = defaultdict(set) 
for k, v in zip(blist, alist): 
    a[k].add(v) 

結果:

>>> a 
defaultdict(<type 'set'>, {2: set(['XX']), 3: set(['HH']), 4: set(['TT']), 5: set(['GG', 'XX']), 7: set(['KK']), 8: set(['PP']), 9: set(['II', 'LL'])}) 

defaultdictdict一個子類,另有同樣的方式表現。

+0

這給了我:'defaultdict(,{2:'XX',3:'HH',4:'TT',5:'XX',7:'KK',8''' ,9:'LL'})' 我想他希望5的值包含GG和XX。 – glormph 2013-03-12 15:35:45

+0

@glormph:確實,哎呀,糾正了。我對'.update()'做了一個假設,它不適用於defaultdict。 – 2013-03-12 15:37:28

0

用你的代碼,然後添加:

a = {x: set(a[x]) for x in a } 
+0

我不能使用它,它說它是無效的語法......? – edg 2013-03-12 15:41:05

+0

你在哪個python版本上?這個作品從python 2.7我認爲 – glormph 2013-03-12 15:42:45

+0

我使用2.6.6 ... – edg 2013-03-12 15:49:53