2013-11-25 3 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»] я мог бы использовать Bobby .count (LOC1). чтобы найти нужную информацию, но здесь все иначе, также я понятия не имею, как сделать таблицу Я не целые коды, мне просто нужно знать, как я должен начинать.

+1

Похоже, у вас есть 2 списка данных. – slider

+0

Зачем нужен список? Словарь был бы намного лучше. – aIKid

ответ

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} 
+0

проблема заключается в том, что список не получен непосредственно, что означает, что список не может быть заметно замечен в моей программе, поскольку он был извлечен из txt-файла – rggod

+0

@ user2994135 Ok. Я редактировал код, чтобы понять, как вы можете создать словарь, не зная списков. – 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

. Еще одна проблема с вашим кодом, который вы здесь не использовали. Пожалуйста, задайте новый вопрос. – aIKid

0

Если вы должны иметь два списка для хранения лиц и ихние места, вы можете иметь следующий код для построения Dict, который указывает, какое лицо побывал, какие места и времена.

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 

тогда, у вас есть Dict * person_to_places * как это:

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

После этого выведите таблицу, как вам нравится.

Смежные вопросы