2017-07-10 74 views
-1

我的(唯一的)單詞的列表點擊數:保持在字典

words = [store, worry, periodic, bucket, keen, vanish, bear, transport, pull, tame, rings, classy, humorous, tacit, healthy] 

,我想用列表的兩種不同的列表,以交叉檢查(使用相同的範圍內),而計算的數量命中。

l1 = [[terrible, worry, not], [healthy], [fish, case, bag]] 
l2 = [[vanish, healthy, dog], [plant], [waves, healthy, bucket]] 

我想用字典,並承擔字爲關鍵,但將需要兩個「價值」(每個列表)的命中數。 所以輸出會是這樣的:

{"store": [0, 0]} 
{"worry": [1, 0]} 
... 
{"healthy": [1, 2]} 

怎麼會是這樣的工作? 提前謝謝!

+0

聽起來你已經得到了基本結構制定。你到底在做什麼? – glibdud

+3

讓您的生活更輕鬆,並使用'collections.Counter'列表來代替? –

+1

@glibdud,我想我的想法是正確的,但我可能會錯過某種方法或解決方法,比迭代和添加更簡單 - 就像tobias現在說的那樣...也要檢查它! – DJM

回答

2

您可以使用itertools拼合列表,然後使用字典解析:

from itertools import chain 
words = [store, worry, periodic, bucket, keen, vanish, bear, transport, pull, tame, rings, classy, humorous, tacit, healthy] 

l1 = [[terrible, worry, not], [healthy], [fish, case, bag]] 
l2 = [[vanish, healthy, dog], [plant], [waves, healthy, bucket]] 

l1 = list(chain(*l1)) 

l2 = list(chain(*l2)) 

final_count = {i:[l1.count(i), l2.count(i)] for i in words} 
+0

謝謝Ajax,也完美運作。短而優雅。該鏈也將非常方便地簡化我以前的一些代碼! – DJM

+0

很高興能幫到你! – Ajax1234

2

對於你的字典例如,你只需要遍歷每個列表和添加這些到字典像這樣:

my_dict = {} 
for word in l1: 
    if word in words: #This makes sure you only work with words that are in your list of unique words 
     if word not in my_dict: 
      my_dict[word] = [0,0] 
     my_dict[word][0] += 1 
for word in l2: 
    if word in words: 
     if word not in my_dict: 
      my_dict[word] = [0,0] 
     my_dict[word][1] += 1 

(或者你能有這樣的重複代碼,對於參數的傳遞函數中列表,字典和索引,以這種方式重複更少的行)

如果您的列表在您的示例中是2d,那麼您只需將for循環中的第一個迭代更改爲2d即可。

my_dict = {} 
for group in l1: 
    for word in group: 
     if word in words: 
      if word not in my_dict: 
       my_dict[word] = [0,0] 
      my_dict[word][0] += 1 
for group in l2 
    for word in group: 
     if word in words: 
      if word not in my_dict: 
       my_dict[word] = [0,0] 
      my_dict[word][1] += 1 

但如果你只是想知道在普通的話,也許套可能是一種選擇爲好,因爲你有工會運營商套,方便觀看的共同所有的話,但套消除重複所以如果計數是必要的,那麼該集合不是一個選項。

+0

謝謝戴維,我想我只是無法想象'列表作爲價值',但它完美的作品。正如你所說,套件不是一個選項,因爲我需要點擊次數! – DJM

+1

絕對。 @ Ajax1234的itertools示例更高效,但如果發現不能使用'chain'的情況,可以將此字典作爲後備口袋中的一個工具來計算。祝你好運! –