alwbtc
alwbtc

Reputation: 29455

How to print dictionary's values from left to right?

I have a dictionary:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"}

When I try to print its values, they are printed from right to left:

>>> for item in a.values():
    print item,


edc qaz wer

I want them to be printed from left to right:

wer qaz edc

How can I do it?

Upvotes: 0

Views: 1767

Answers (5)

Junuxx
Junuxx

Reputation: 14261

Assuming you want them in alphabetical order of the keys, you can do something like this:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"}  # your dictionary

keylist = a.keys()   # list of keys, in this case ["w3", "w2", "w1"]
keylist.sort()       # sort alphabetically in place, 
                     #  changing keylist to ["w1", "w2", w3"]

for key in keylist:
    print a[key]     # access dictionary in order of sorted keys

Upvotes: 3

motoku
motoku

Reputation: 1581

Dictionaries use hash values to associate values. The only way to sort a dictionary would look something like:

dict = {}
x = [x for x in dict]
# sort here
y = []
for z in x: y.append(dict[z])

I haven't done any real work in python in a while, so I may be a little rusty. Please correct me if I am mistaken.

Upvotes: 0

mgilson
mgilson

Reputation: 309969

You can use collections.OrderedDict (python 2.7 or newer -- There's an ActiveState recipe somewhere which provides this functionality for python 2.4 or newer (I think)) to store your items. Of course, you'll need to insert the items into the dictionary in the proper order (the {} syntax will no longer work -- nor will passing key=value to the constructor, because as others have mentioned, those rely on regular dictionaries which have no concept of order)

Upvotes: 4

nye17
nye17

Reputation: 13347

as @IgnacioVazquez-Abrams mentioned, this is no such thing as order in dictionaries, but you can achieve a similar effect by using the ordered dict odict from http://pypi.python.org/pypi/odict

also check out PEP372 for more discussion and odict patches.

Upvotes: 0

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798804

You can't. Dictionaries don't have any order you can use, so there's no concept of "left to right" with regards to dictionary literals. Decide on a sorting, and stick with it.

Upvotes: 9

Related Questions