2010-09-12 154 views
1

我知道python字典如何存儲鍵:值元組。在我正在處理的項目中,我需要存儲與列表中的值關聯的密鑰。 ex: key - > [0,2,4,5,8] 其中, 鍵是來自文本文件 的單詞,該列表值包含用於表示該單詞出現的DocID的整數。Python:存儲與字典中的鍵相關聯的列表值

只要我在另一個文檔中找到相同的單詞,我需要將該DocID追加到列表中。

我該如何做到這一點?

回答

4

您可以使用defauldict,像這樣的好地方:

>>> import collections 
>>> d = collections.defaultdict(list) 
>>> d['foo'].append(9) 
>>> d 
defaultdict(<type 'list'>, {'foo': [9]}) 
>>> d['foo'].append(90) 
>>> d 
defaultdict(<type 'list'>, {'foo': [9, 90]}) 
>>> d['bar'].append(5) 
>>> d 
defaultdict(<type 'list'>, {'foo': [9, 90], 'bar': [5]}) 
+0

完美!這工作。那麼集合究竟是什麼?這是一個新的數據結構嗎? – csguy11 2010-09-12 07:20:26

+0

@ csguy11:'collections'是提供一些數據結構的標準模塊。 – 2010-09-12 07:23:04

+0

好吧,明白了。謝謝! – csguy11 2010-09-12 07:23:47

-1

如果我明白你的問題的權利,你可以試試這個,

  >>> a=({'a':1,'b':2}); 
      >>> print a['a'] 
      1 
      >>> a.update({'a':3}) 
      >>> print a['a'] 
      3 
      >>> a.update({'c':4}) 
      >>> print a['c'] 
      4 

這將舊版本的Python

+0

你拿他沒問題的權利-1。 OP希望該值是一個列表,並將新數字附加到該列表中。你的例子用新的覆蓋舊的條目。 – 2010-09-12 08:08:05

+0

@ Space_C0wb0y:我給出的例子說c是一個新的值,它被添加到dictionary.Old值只是一個例子來更新值,如你所說... – Rajeev 2010-09-12 14:51:17

+0

在你的第一行,'a [' a'] = 1'。在下次更新後,'a ['a'] = 3'。這意味着「a」的舊值已被新值覆蓋。 OP想要的是'a ['a'] = [1,3]'。 – 2010-09-12 18:00:26

0

像這樣的工作嗎?

 

word = 'something' 
l = [0,2,4,5,8] 
myDict = {} 
myDict[word] = l 

#Parse some more 

myDict[word].append(DocID) 
 
1

這是使用defaultdict

from collections import defaultdict 

docWords = defaultdict(set) 
for docID in allTheDocIDs: 
    for word in wordsOfDoc(docID): 
     docWords[word].add(docID) 

你可以使用一個列表,而不是一套的,如果你要

+0

默認字典是在2.5版本的python.ie的最新版本中引入的,所以代碼可能不適用於舊版本 – Rajeev 2010-09-12 07:04:38

+0

我認爲他的意思是'defaultdict(set) '不'defaultDict(set)',但我第二個想法。 – 2010-09-12 07:04:55

+0

@Ben我在一半的地方弄明白了(現在修好) – cobbal 2010-09-12 07:06:13

0

我曾經寫過一個幫手類,讓@Vinko Vrsalovic的answer更易於使用:

class listdict(defaultdict): 
    def __init__(self): 
     defaultdict.__init__(self, list) 

    def update(self, E=None, **F): 
     if not E is None: 
      try: 
       for k in E.keys(): 
        self[k].append(E[k]) 
      except AttributeError: 
       for (k, v) in E: 
        self[k].append(v) 
     for k in F: 
      self[k].append(F[k]) 

這可以像這樣使用:

>>> foo = listdict() 
>>> foo[1] 
[] 
>>> foo.update([(1, "a"), (1, "b"), (2, "a")]) 
>>> foo 
defaultdict(<type 'list'>, {1: ['a', 'b'], 2: ['a']}) 
1

這篇文章是有幫助的爲我解決一個問題,我曾在動態附有數據列表創建變量鍵。請看下圖:

import collections 

d = collections.defaultdict(list) 
b = collections.defaultdict(list) 
data_tables = ['nodule_data_4mm_or_less_counts','nodule_data_4to6mm_counts','nodule_data_6to8mm_counts','nodule_data_8mm_or_greater_counts'] 

for i in data_tables: 
    data_graph = con.execute("""SELECT ACC_Count, COUNT(Accession) AS count 
              FROM %s 
              GROUP BY ACC_Count"""%i) 
    rows = data_graph.fetchall() 
    for row in rows: 
     d[i].append(row[0]) 
     b[i].append(row[1]) 

print d['nodule_data_4mm_or_less_counts'] 
print b['nodule_data_4mm_or_less_counts'] 

,它輸出的數據列出了每個鍵,然後可以改變一個np.array密謀等

>>>[4201, 1052, 418, 196, 108, 46, 23, 12, 11, 8, 7, 2, 1] 
>>>[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] 
相關問題