Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a tuple data structure in Python

Tags:

python

tuples

I want to have an 3 item combination like tag, name, and list of values (array) what is the best possible data structure to store such things.

Current I am using dictionary, but it only allows 2 items, but easy traversal using

for k, v in dict.iteritems():

can we have something similar like:

for k, v, x in tuple.iteritems():
like image 752
Priyank Bolia Avatar asked Dec 02 '09 07:12

Priyank Bolia


People also ask

Is there a tuple function in Python?

The Python tuple() function is a built-in function in Python that can be used to create a tuple. A tuple is an ordered and immutable sequence type.

How many data structures are there in Python?

Python has four non-primitive inbuilt data structures namely Lists, Dictionary, Tuple and Set.

What data structure is Python list?

A list is a data structure in Python that is a mutable, or changeable, ordered sequence of elements. Each element or value that is inside of a list is called an item. Just as strings are defined as characters between quotes, lists are defined by having values between square brackets [ ] .

Can we do data structures in Python?

Python has four types of built-in data structures, list, tuple, set, and dictionary. Python also has user-defined data structures. Users can create their own data structures in Python and have full control over their functionality.


2 Answers

Python tutorial on data structutres see section 5.3 "Tuples and sequences"

however, if you want to use "name" to index the data, you probably want to use a dictionary that has the string name as key and values are tuple of (tag, [list, of, values]) e.g.

  d = 
    { "foo" : ("dog", [1,2,3,4]),
      "bar" : ("cat", [4,5,6,7,8,9]),
      "moo" : ("cow", [4,5,7,8,9,1,3,4,65])
    }

  for name,(tag,values) in d.items():
    do_something()

this way alsod["foo"] will work, just like for any other dictionary.

like image 106
Kimvais Avatar answered Oct 05 '22 22:10

Kimvais


You can consider the collections.namedtuple type to create tuple-like objects that have fields accessible by attribute lookup.

collections.namedtuple(typename, field_names[, verbose])

Returns a new tuple subclass named typename. The new subclass is used to create tuple-like objects that have fields accessible by attribute lookup as well as being indexable and iterable. Instances of the subclass also have a helpful docstring (with typename and field_names) and a helpful __repr__() method which lists the tuple contents in a name=value format.

>>> import collections
>>> mytup = collections.namedtuple('mytup', ['tag','name', 'values'])
>>> e1 = mytup('tag1','great',[1,'two',3])
>>> e1
mytup(tag='tag1', name='great', values=[1, 'two', 3])
>>> e1.values
[1, 'two', 3]
>>> 

Building on other answers, an example of filtering a list of mytup objects:

>>> tlist = [mytup("foo", "dog", [1,2,3,4]),
    mytup("bar","cat", [4,5,6,7,8,9]), mytup("moo","cow", [4,5,7,8,9,1,3,4,65])]
>>> tlist
[mytup(tag='foo', name='dog', values=[1, 2, 3, 4]),
mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9]),
mytup(tag='moo', name='cow', values=[4, 5, 7, 8, 9, 1, 3, 4, 65])]
>>> [t for t in tlist if t.tag == 'bar']
[mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9])]
>>> 

Namedtuple objects can, of course, be used in other structures (e.g a dict), as mentioned in other answers. The advantage is, obviously, that the fields are named, and code using them is clearer.

like image 20
gimel Avatar answered Oct 05 '22 22:10

gimel