How to implement associative array (not dictionary) in Python?

前端 未结 6 2375
Happy的楠姐
Happy的楠姐 2020-12-17 21:57

I trying to print out a dictionary in Python:

Dictionary = {\"Forename\":\"Paul\",\"Surname\":\"Dinh\"}
for Key,Value in Dictionary.iteritems():
  print Key,         


        
相关标签:
6条回答
  • 2020-12-17 22:25

    'but dictionaries in Python are sorted by values' maybe I'm mistaken here but what game you that ideea? Dictionaries are not sorted by anything.

    You would have two solutions, either keep a list of keys additional to the dictionary, or use a different data structure like an array or arrays.

    0 讨论(0)
  • 2020-12-17 22:28

    You can use collections.OrderedDict. It's available in python2.7 and python3.2+.

    0 讨论(0)
  • 2020-12-17 22:34

    I wonder if it is an ordered dict that you want:

    >>> k = "one two three four five".strip().split()
    >>> v = "a b c d e".strip().split()
    >>> k
      ['one', 'two', 'three', 'four', 'five']
    >>> v
      ['a', 'b', 'c', 'd', 'e']
    >>> dx = dict(zip(k, v))
    >>> dx
       {'four': 'd', 'three': 'c', 'five': 'e', 'two': 'b', 'one': 'a'}
    >>> for itm in dx: 
            print(itm)
    
       four
       three
       five
       two
       one
    
    >>> # instantiate this data structure from OrderedDict class in the Collections module
    >>> from Collections import OrderedDict
    >>> dx = OrderedDict(zip(k, v))
    >>> for itm in dx:
            print(itm)
    
       one
       two
       three
       four
       five 
    

    A dictionary created using the OrderdDict preserves the original insertion order.

    Put another way, such a dictionary iterates over the key/value pairs according to the order in which they were inserted.

    So for instance, when you delete a key and then add the same key again, the iteration order is changes:

    >>> del dx['two']
    >>> for itm in dx:
            print(itm)
    
           one
           three
           four
           five
    
    >>> dx['two'] = 'b'
    >>> for itm in dx:
            print(itm)
    
           one
           three
           four
           five
           two
    
    0 讨论(0)
  • 2020-12-17 22:40

    This may meet your need better:

    Dictionary = {"Forename":"Paul","Surname":"Dinh"}
    KeyList = ["Forename", "Surname"]
    for Key in KeyList:
        print Key,"=",Dictionary[Key]
    
    0 讨论(0)
  • 2020-12-17 22:44

    First of all dictionaries are not sorted at all nor by key, nor by value.

    And basing on your description. You actualy need collections.OrderedDict module

    from collections import OrderedDict
    
    my_dict = OrderedDict([("Forename", "Paul"), ("Surname", "Dinh")])
    
    for key, value in my_dict.iteritems():
        print '%s = %s' % (key, value)
    

    Note that you need to instantiate OrderedDict from list of tuples not from another dict as dict instance will shuffle the order of items before OrderedDict will be instantiated.

    0 讨论(0)
  • 2020-12-17 22:50

    You can use a list of tuples (or list of lists). Like this:

    Arr= [("Forename","Paul"),("Surname","Dinh")]
    for Key,Value in Arr: 
        print Key,"=",Value
    
    Forename = Paul
    Surname = Dinh
    

    you can make a dictionary out of this with:

    Dictionary=dict(Arr)
    

    And the correctly sorted keys like this:

    keys = [k for k,v in Arr]
    

    Then do this:

    for k in keys: print k,Dictionary[k]
    

    but I agree with the comments on your question: Would it not be easy to sort the keys in the required order when looping instead?

    EDIT: (thank you Rik Poggi), OrderedDict does this for you:

    od=collections.OrderedDict(Arr)
    for k in od: print k,od[k]
    
    0 讨论(0)
提交回复
热议问题