Solved

Python list of tuples

Posted on 2008-10-15
4
756 Views
Last Modified: 2011-04-14
Hi,

I have a list of tuples and would like to create a list as described below:
Given list of tuples:
[(datetime.datetime(2008, 6, 21, 0, 0), 26, 'A'),
(datetime.datetime(2008, 6, 22, 0, 0), 22, 'B'),
(datetime.datetime(2008, 6, 22, 0, 0), 15, 'C'),
(datetime.datetime(2008, 6, 22, 0, 0), 16, 'A'),
(datetime.datetime(2008, 6, 23, 0, 0), 17, 'A'),
(datetime.datetime(2008, 6, 23, 0, 0), 0, 'B'),
(datetime.datetime(2008, 6, 23, 0, 0), 14, 'C')]

Resulted list required:
Dates=[datetime.datetime(2008, 6, 21, 0, 0),datetime.datetime(2008, 6, 22, 0, 0),datetime.datetime(2008, 6, 23, 0, 0)]
A=[26,16,17]
B=[0,22,0]
c=[0,15,14]

Here we are constructing list for DATES, A,B & C.As you can see in resulted list for A,B,C, it put 0 if there is no data for given date. I am not sure how I can achieve these resulted list for Dates,A,B,C.

Thanks,
0
Comment
Question by:punit
  • 2
4 Comments
 
LVL 15

Assisted Solution

by:mish33
mish33 earned 83 total points
Comment Utility
Given the list is sorted by date:
from itertools import groupby

from operator import itemgetter
 

Dates = []

A = []

B = []

C = {}

for date,it in groupby(input_list, itemgetter(0)):

  Dates.append(date)

  d = dict((k,v) for d,v,k in it)

  A.append(d.get('A',0))

  B.append(d.get('B',0))

  C.append(d.get('C',0))

Open in new window

0
 
LVL 28

Expert Comment

by:pepr
Comment Utility
mish33: The line 7 have to be changed to C = []. Nice solution; however, the input_list must be sorted by the date. It is the case in the example. It depends how it is collected.

On the other hand, it may be rather difficult to understand to a beginner.

0
 
LVL 28

Accepted Solution

by:
pepr earned 84 total points
Comment Utility
The snippet below show similar solution without using the itertools and operator modules. It is not plain simple either (in comparison with mish33's). On the other hand, the goal itself seems to be rather complicated. The separation of the datetime (in one list, by position) from the lists for the identification where values are coupled with the date by positions...
import datetime
 

lst = [

(datetime.datetime(2008, 6, 21, 0, 0), 26, 'A'),

(datetime.datetime(2008, 6, 22, 0, 0), 22, 'B'),

(datetime.datetime(2008, 6, 22, 0, 0), 15, 'C'),

(datetime.datetime(2008, 6, 22, 0, 0), 16, 'A'),

(datetime.datetime(2008, 6, 23, 0, 0), 17, 'A'),

(datetime.datetime(2008, 6, 23, 0, 0), 0, 'B'),

(datetime.datetime(2008, 6, 23, 0, 0), 14, 'C')

]
 

dates = {}     # empty dictionary of structures related to datetimes

idset = set()  # empty set of identifications like 'A', 'B', 'C'
 

for dt, n, ident in lst:

    if dt not in dates:

        dates[dt] = {}      # empty dict of id's

    dates[dt][ident] = n    # value for the date and ident

    idset.add(ident)        # possibly new identification (globally)
 

idlst = sorted(list(idset)) # result like ['A', 'B', 'C'] 

print 'Identifications:', repr(idlst)
 

# Dates with capital = the first wanted list, dates with small

# letter is the dictionary date -> dict of (id, value).

Dates = sorted(dates.keys())

print 'Dates=' + repr(Dates)
 

# Prepare dict of id -> list of values.

result = dict((ident, []) for ident in idlst)
 

# Loop in the order of the collected dates (sorted).

for dt in Dates:

    iddic = dates[dt]   # shortcut reference to the dic of (id, value)

    for ident in idlst: # through all known id's

        result[ident].append(iddic.get(ident, 0)) # zero if value not found
 

# Display the results.

for ident in idlst: # through all known id's

    print ident + '=' + repr(result[ident])

Open in new window

0
 
LVL 2

Assisted Solution

by:exile_4
exile_4 earned 83 total points
Comment Utility
Hi punit,

mish33 and pepr already provided you the solutions, I just came across on this Question and just wanted to show another way of achieving the same result using the combination of list comprehension, set/dict/list/sorted built-in function way.

Cheers....
import datetime
 

data = [(datetime.datetime(2008, 6, 21, 0, 0), 26, 'A'), (datetime.datetime(2008, 6, 22, 0, 0), 22, 'B'), (datetime.datetime(2008, 6, 22, 0, 0), 15, 'C'), (datetime.datetime(2008, 6, 22, 0, 0), 16, 'A'), (datetime.datetime(2008, 6, 23, 0, 0), 17, 'A'), (datetime.datetime(2008, 6, 23, 0, 0), 0, 'B'), (datetime.datetime(2008, 6, 23, 0, 0), 14, 'C')]
 

Dates = list(sorted(set([item[0] for item in data]))) # combination of list comprehension, set,list and sorted built-in function

A = []

B = []

C = []
 

for dt in Dates: #Here we loop through the filtered date

    d = dict([(item2,item1) for item0, item1, item2 in data if item0 == dt]) #again we use list comprehension and dict built-in function and extract the last 2 items beside the datetime    

    A.append(d.get('A',0))

    B.append(d.get('B',0))

    C.append(d.get('C',0))

    

print Dates

print A

print B

print C

Open in new window

0

Featured Post

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
None is returned 6 36
Parse csv file and generate graphs in HTML in bash 8 137
Python script details 2 61
Python multiple IF statements 4 68
Plenty of writing has gone on the web trying to compare Python with other competitive programming languages and vice versa. However, not much has been put into a wholistic perspective. This article should help you decide whether to adopt Python as a…
Article by: Swadhin
Introduction of Lists in Python: There are six built-in types of sequences. Lists and tuples are the most common one. In this article we will see how to use Lists in python and how we can utilize it while doing our own program. In general we can al…
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now