English 中文(简体)
Is there a tuple data structure in Python
原标题:

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():
最佳回答

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.

问题回答

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.

why not just use a list of tuples (yes, this is a data type in python, like lists, but immutable):

mylistoftuples = [(1, 2, 3), (2, "three", 4), (3, 4, [1, 2, 3, 4, 5])]
for k, v, x in mylistoftuples:
    print k, v, x

Here s a comment to @gimel s answer:

>>> import collections
>>> T = collections.namedtuple("T",  tag name values )
>>> from itertools import starmap
>>> list(starmap(T, [("a", "b", [1,2]), ("c", "d",[3,4])]))
[T(tag= a , name= b , values=[1, 2]), T(tag= c , name= d , values=[3, 4])]

You can have an array of 3-item tuples.

arr = [ (1,2,3), (4,5,6), (7,8,9)]
for (k, v, x) in arr:
  # do stuff




相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签