2013-11-25 69 views
0

列表,所以我有3個數據表,創建一個表出來的數據

person=['bobby','tim','sarah','tim','sarah','bobby,'tim','sarah','bobby,] 
places=["loc1","loc1","loc2","loc1","loc2","loc2","loc1","loc2",'loc1"] 

我必須使用這些數據來顯示一個人如何參觀時間某一個地方。 如何將我能夠使用上面的列表來獲得類似的東西

person   loc1   loc2 
bobby   2    1 
tim    3    0 
sarah   0    3 

如果列表列表就像博比= [「LOC1」,「LOC1」,「LOC2」] 我可以使用鮑比.Count之間(LOC1)。找到數據需求但在這裏不同,我也不知道如何使表 我不是整個代碼,我只需要知道我應該如何開始。

+1

看起來像你有2個數據列表。 – slider

+0

爲什麼列表?字典會好得多。 – aIKid

回答

0

我會用字典。通過創建字典的字典,像這樣每名開始(請參閱下方創建它):

data = { 'bobby' : {'loc1':0, 'loc2':0}, 
     'sarah' : {'loc1':0, 'loc2':0}, 
     'tim' : {'loc1':0, 'loc2':0} } 

如果你不知道你的placesperson列表,你可以用套,使data辭典上述形式(也有辦法,但這裏是我的方式):

from sets import Set 
data = dict((name, dict((place, 0) for place in Set(places))) for name in Set(person)) 

,然後簡單地遍歷您的列表,增加相關places

for i in range(len(person)): 
    data[ person[i] ][ places[i] ] += 1 

當您的data字典已準備好,可以根據您的需要來打印它。

下面是data字典在您提供的列表上運行上述代碼後的外觀。

>>> for key in sorted(data): print key, data[key] 
... 
bobby {'loc2': 1, 'loc1': 2} 
sarah {'loc2': 3, 'loc1': 0} 
tim {'loc2': 0, 'loc1': 3} 
+0

問題是沒有直接獲取列表,這意味着列表不能直接在我的程序中看到,因爲它是從txt文件中提取的 – rggod

+0

@ user2994135好的。我編輯了代碼,以反映如何在不知道列表的情況下創建字典。 – slider

2

使用臨時字典存儲的值:

d = {} 
for name, loc in zip(person, places): 
    d.setdefault(name, []).append(loc) 

,並打印它:

>>> for k, v in d.items(): 
    print(k, end='\t') 
    print(v.count('loc1'), end='\t') 
    print(v.count('loc2')) 


tim  3 0 
bobby 2 1 
sarah 0 3 

希望這有助於!

+0

這是非常簡潔:) – flyer

+0

builtins。UnboundLocalError:在賦值之前引用的局部變量'animalname'是我得到的 – rggod

+0

你的代碼還有另一個問題,那就是你在這裏沒有psot。請爲此提出一個新問題。 – aIKid

0

如果你必須有兩個列表存儲和他們地方,你可以有下面的代碼來構建一個字典,表示這人已訪問過的地方和時間。

persons = ['bobby', 'tim', 'sarah', 'tim', 'sarah', 'bobby', 'tim', 'sarah', 'bobby',] 
places = ['loc1', 'loc1', 'loc2', 'loc1', 'loc2', 'loc2', 'loc1', 'loc2', 'loc1'] 

person_to_places = {} 
total = len(persons) 

for i in xrange(total): 
    if not person_to_places.has_key(persons[i]): 
     person_to_places[persons[i]] = [] 
    person_to_places[person[i]].append(places[i]) 

for name, place in person_to_places.items(): 
    person_to_places[name] = {} 
    for p in places: 
     if not person_to_places[name].has_key(p): 
      person_to_places[name][p] = 0 
     person_to_places[name][p] += 1 

那麼,你有一個字典* person_to_places *這樣的:

{'bobby': {'loc1': 2, 'loc2': 1}, 'sarah': {'loc2': 3}, 'tim': {'loc1': 3}} 

之後,輸出表,只要你喜歡。