1

次のようなリストを表示できるコードがあります。

  Name  id number week number
    Piata   4            6    
    Mali    2          20,5    
    Goerge  5           4    
    Gooki   3         24,64,6   
    Mali    5          45,9
    Piata   6           1    
    Piata  12          2,7,8,27,16 etc..

以下のコードで:

import csv
from datetime import date

datedict = defaultdict(set)
with open('d:/info.csv', 'r') as csvfile:
    filereader = csv.reader(csvfile, 'excel')
    #passing the header
    read_header = False
    start_date=date(year=2009,month=1,day=1)
    #print((seen_date - start_date).days)
    tdic = {}
    for row in filereader: 
        if not read_header:
            read_header = True
            continue

    # reading the rest rows
        name,id,firstseen = row[0],row[1],row[3]
        try:
            seen_date = datetime.datetime.strptime(firstseen, '%d/%m/%Y').date()               
            deltadays = (seen_date-start_date).days
            deltaweeks = deltadays/7 + 1
            key = name,id
            currentvalue = tdic.get(key, set())
            currentvalue.add(deltaweeks)
            tdic[key] = currentvalue

        except ValueError:
            print('Date value error')
            pass

今、私は自分のリストを、以下のリストのような各名前とその週数のIDの数を与えるリストに変換したいと考えています:

Name     number of ids      weeknumbers
Mali         2                20,5,45,9
Piata        3               1,6,2,7,8,27,16
Goerge       1                   4
Gooki        1                 24,64,6

この部分のコードを書くのを手伝ってくれる人はいますか?

4

2 に答える 2

0

それを考えると:

tdict = {('Mali', 5): set([9, 45]), ('Gooki', 3): set([24, 64, 6]), ('Goerge', 5): set([4]), ('Mali', 2): set([20, 5]), ('Piata', 4): set([4]), ('Piata', 6): set([1]), ('Piata', 12): set([8, 16, 2, 27, 7])}

次に、上記の結果を出力します。

names = {}
for ((name, id), more_weeks) in tdict.items():
  (ids, weeks) = names.get(name, (0, set()))
  ids = ids + 1
  weeks = weeks.union(more_weeks)
  names[name] = (ids, weeks)

for (name, (id, weeks)) in names.items():
  print("%s, %s, %s" % (name, id, weeks)
于 2013-04-22T14:34:14.247 に答える