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():
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.
Python has four non-primitive inbuilt data structures namely Lists, Dictionary, Tuple and Set.
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 [ ] .
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With