2012-07-02 161 views
1

我在哪裏,到現在我實現了字典成功的情況下,當輸入文件是這樣的:字典詞典特例

line1 field1 field2 field3 field4 field5 
line2 field1 field2 field3 field4 field5 

等等.....

我做線數字作爲密鑰,tuple (field1, field2, field3, field4)作爲我的字典的相應值。現在,我想包含field5作爲key (field1, field2, field3, field4)的值。這意味着,tuple (field1, field2, field3, field4)需要同時是關鍵和價值。 python中可以實現這種實現嗎?

+0

我很困惑。你的意思是你想在'field5'上對行進行分組,並且有一個字典字典(如你的標題),或者文件的行已經是唯一的,你只需要'field5'作爲鍵而不是行號(如「包含...作爲鍵的值」)? –

+0

元組可以是鍵,但是你需要其他字段作爲鍵的一部分嗎?如果field5是唯一的,你可以使用它作爲關鍵? (如果你使用行號作爲鍵,那麼列表是不是更簡單?) – cdarke

+0

我使元組(字段1,字段2,字段3,字段4)作爲值和行號作爲鍵。基本上我在做什麼,如果行1和行2鍵具有相同的值,我刪除詞典中的兩個條目。作爲新的實現,在刪除條目之前,我想要獲取時間戳的field5值的差異。 – newbie555

回答

0

如果我理解你的問題的權利,是的。但是你將會爲一大組浪費一大堆空間。

dic  = {} 
tuple1 = ("field1","field2","field3","field4") 

dic["line1"] = tuple1 
dic[tuple1] = "field5" 

print dic["line1"] 
print dic[tuple1] 
+0

我認爲這裏需要二維詞典。 – newbie555

+0

不,它不這樣做。它創建2個鍵值對。第一個是{「line1」:tuple1}第二個是{tuple1:「Field5」}。最終的結果是字典有2個鍵,每個鍵索引相應的值。 – 8bitwide

+0

@rock盧克爲什麼我仍然處於失落狀態?但是,從來沒有,你的問題是如何實施字典詞典? – 8bitwide

0

也就是說,元組(FIELD1,FIELD2,字段3,字段4)必須在同一時間的鍵和值。 python中可以實現這種實現嗎?

是的。有什麼能阻止你做這樣的:

key = ("f1", "f2", "f3", "f4", "f5") 
value = ("f1", "f2", "f3", "f4", "f5") 
d = {key: value} 

如果我理解正確的話,你一直在做這樣的事情至今:

line_no = 1 
d = {} 
for line in open(FILE): 
    d[line_no] = line # line = ("f1", "f2", "f3", "f4") 
    line_no += 1 

..?

如果不是,請詳細說明我錯在何處或發佈你的源代碼:)

編輯:

好吧,謝謝你的評論,我想我現在明白了。我會做這樣的:

d = {} 
for line in open(FILE): 
    d[line] = [] 
    d[line].append(f5) # line = ("f1", "f2", "f3", "f4"), f5 = timestamp 

這樣,你會使用整個元組的關鍵,可以減去具有相同的F1,F2,F3,F4記錄的時間戳(F5)。對我來說,儘管在SQL中看起來更容易。

這樣,隨着負載的增加,您將有恆定的查找時間和線性時間。但是我認爲如果關鍵是不重要的話,你會受到一些性能的影響。

讓我想想怎麼你會相互suctract時間戳..

EDIT2:

是的,你可以在一對的第一個元素的列表:FL = P [ 0]在對p]],然後過濾掉任何具有多於1個次數:

像這樣L2 = [1爲升在FL如果len(L)> 1]

但沒有按」 t看起來非常有效..

+0

您的帖子有輕微更正。直到現在,我正在做d = {LINENO:(「f1」,「f2」,「f3」,「f4」)}。現在,我想關聯f5,這樣當兩行有相同的(「f1」,「f2」,「f3」,「f4」)時,我想要取這兩行的f5的差值。 – newbie555

+0

是的,這是一個正確的編輯 – newbie555

+0

@jensen謝謝,但我只想要行號作爲鍵和元組(「f1」,「f2」,「f3」,「f4」)作爲值。我以這種方式基於我的整個300行代碼。我不想改變這一點。我想要擴展那個實現,那就是全部。 – newbie555

0

http://docs.python.org/library/functions.html?highlight=tuple#tuple

元素是不可變序列類型,如在序類型記錄 - STR,unicode的,列表,元組,字節組,緩衝液,x範圍。對於其他 容器,請參閱內置的詞典,列表和設置類以及 集合模塊。

元組是不可變的,這意味着你不能從元組中追加或刪除項目。你必須重建變量來改變它。如果您計劃及時更改可迭代變量,請使用list

除了元組是不可變的,問題有點含糊。

這是一種將field5附加到字典中的方法。

a = {1:(f1,f2,f3,f4), 2:(f1,f2,f3,f4)} # this is our dictionary contains tuple 

for key, value in a.iteritems(): # iterate over dictionary 
    a[key] += (field5,) # comma is important, you can only concanate tuple with tuple. 


# or you can do 
a[linenumber] += (field5,)