所以我有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
如果列表的列表像bobby = ['loc1','loc1','loc2'] 我可以使用bobby.count(loc1)。找到数据需要但这里有所不同,我也不知道如何制作表格 我不是完整的代码,我只需要知道我应该如何开始。
答案 0 :(得分:2)
使用临时dict存储值:
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
希望这有帮助!
答案 1 :(得分:0)
我会使用字典。首先为每个名称创建一个字典字典,如下所示(请参阅下面的创建方法):
data = { 'bobby' : {'loc1':0, 'loc2':0},
'sarah' : {'loc1':0, 'loc2':0},
'tim' : {'loc1':0, 'loc2':0} }
如果您不知道自己的places
和person
列表,则可以使用集合制作上述表单中的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}
答案 2 :(得分: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}}
之后,根据需要输出表格。