我知道python字典如何存儲鍵:值元組。在我正在處理的項目中,我需要存儲與列表中的值關聯的密鑰。 ex: key - > [0,2,4,5,8] 其中, 鍵是來自文本文件 的單詞,該列表值包含用於表示該單詞出現的DocID的整數。Python:存儲與字典中的鍵相關聯的列表值
只要我在另一個文檔中找到相同的單詞,我需要將該DocID追加到列表中。
我該如何做到這一點?
我知道python字典如何存儲鍵:值元組。在我正在處理的項目中,我需要存儲與列表中的值關聯的密鑰。 ex: key - > [0,2,4,5,8] 其中, 鍵是來自文本文件 的單詞,該列表值包含用於表示該單詞出現的DocID的整數。Python:存儲與字典中的鍵相關聯的列表值
只要我在另一個文檔中找到相同的單詞,我需要將該DocID追加到列表中。
我該如何做到這一點?
您可以使用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]})
如果我明白你的問題的權利,你可以試試這個,
>>> 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
你拿他沒問題的權利-1。 OP希望該值是一個列表,並將新數字附加到該列表中。你的例子用新的覆蓋舊的條目。 – 2010-09-12 08:08:05
@ Space_C0wb0y:我給出的例子說c是一個新的值,它被添加到dictionary.Old值只是一個例子來更新值,如你所說... – Rajeev 2010-09-12 14:51:17
在你的第一行,'a [' a'] = 1'。在下次更新後,'a ['a'] = 3'。這意味着「a」的舊值已被新值覆蓋。 OP想要的是'a ['a'] = [1,3]'。 – 2010-09-12 18:00:26
像這樣的工作嗎?
word = 'something'
l = [0,2,4,5,8]
myDict = {}
myDict[word] = l
#Parse some more
myDict[word].append(DocID)
這是使用defaultdict
from collections import defaultdict
docWords = defaultdict(set)
for docID in allTheDocIDs:
for word in wordsOfDoc(docID):
docWords[word].add(docID)
你可以使用一個列表,而不是一套的,如果你要
我曾經寫過一個幫手類,讓@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']})
這篇文章是有幫助的爲我解決一個問題,我曾在動態附有數據列表創建變量鍵。請看下圖:
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]
完美!這工作。那麼集合究竟是什麼?這是一個新的數據結構嗎? – csguy11 2010-09-12 07:20:26
@ csguy11:'collections'是提供一些數據結構的標準模塊。 – 2010-09-12 07:23:04
好吧,明白了。謝謝! – csguy11 2010-09-12 07:23:47