2012-05-29 86 views
0

列表值我創建的列表的字典使用:訪問字典

names = defaultdict(list) 

我讀從文本文件中的一行,它分成3列。我將該行的第一列作爲關鍵字,將其他兩列作爲列表中的值。我用下面的代碼段如下:

with open('f.txt') as f: 
    lines = [l.split() for l in f.readlines() if l.strip()] 
    for l in lines: 
      names[l[0]].append([l[1],l[2]]) 

我有文本文件是這樣的:

00:12:34:23:45:67  134  123.456 

45:34:23:45:44:23  133  345.123 

3f:32:dr:45:34:r5  133  212.345 

00:12:34:23:45:67  134  555.555 

00:12:34:23:45:67  136  555.556 

00:12:34:23:45:67  134  555.560 

如果我跑我的程序輸出鍵:值對,輸出爲:

00:12:34:23:45:67 [['134', '123.456'], ['134', '555.555'], ['136', '555.556'], ['134', '555.560']] 

45:34:23:45:44:23 [['133', '345.123']] 

3f:32:dr:45:34:r5 [['133', '212.345']] 

如何訪問列表中的各個元素?例如,在這個輸出中,我要計算每個鍵的133,134,135,136的數量以及每種類型之間的時間差。例如,對於密鑰00:12:34:23:45:67,有3個134,1 136.該密鑰的最高值和最低值之間的時間差爲555.560-123.456。我想要所有133,134,135,136種類型的結果。我很多天都在爲這個問題苦苦掙扎。請幫忙。非常感激。

+1

我該如何接受答案?點擊哪個按鈕? – learner

+0

最佳答案旁邊的複選標記。 –

+0

@ user1411416 [這個元問題詳細解釋瞭如何接受答案。](http://meta.stackexchange.com/a/5235/141962) – phihag

回答

3

這似乎是一個更好的數據結構是爲了在這裏...

from collections import defaultdict 
names=defaultdict(lambda :defaultdict(list)) 

with open('f.txt') as f: 
    lines = [l.split() for l in f.readlines() if l.strip()] 
    for l in lines: 
     names[l[0]][l[1]].append(float(l[2])) 

現在,拿到計數和差異從最大/最小:

for k,v in names.items(): 
    for kk,vv in v.items(): 
     print k,kk,len(vv),max(vv)-min(vv) 

輸出:

00:12:34:23:45:67 136 1 0.0 
00:12:34:23:45:67 134 3 432.104 
45:34:23:45:44:23 133 1 0.0 
3f:32:dr:45:34:r5 133 1 0.0 
+1

+1,但是我可以建議將'l'解包爲'name,val1,val2'還是類似的東西? – senderle

+0

我同意問題中提出的數據結構讓事情變得困難。 – Chris

+0

我收到一個錯誤:''list'object has no attribute'items'「 – learner

0

要計算的計數,你可以做到以下幾點:

counts = {} 
for key, values in names.items(): 
    for v in values: 
     if v[0] in counts: 
      counts[v[0]] += 1 
     else: 
      counts[v[0]] = 1