2013-11-25 31 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}} 

之后,输出表,只要你喜欢。