-3

So I have this dictionary:

{
   'TEST_DEMON_2':
       {'placement': '2',
        'owner': 'Owner2',
        'verifier': 'Verifier2',
        'difficulty': 'Medium',
        'level_id': '2'},
   'TEST_DEMON_4':
       {'placement': '4',
        'owner': 'Owner4',
        'verifier': 'Verifier4',
        'difficulty': 'Medium',
        'level_id': '4'},
   'TEST_DEMON_3':
       {'placement': '3',
        'owner': 'Owner3',
        'verifier': 'Verifier3',
        'difficulty': 'Medium',
        'level_id': '3'},
   'TEST_DEMON_1':
       {'placement': '1',
        'owner': 'Owner1',
        'verifier': 'Verifier1',
        'difficulty': 'Easy',
        'level_id': '1'}
}

And I have a function that add a dictionary inside it :

def add_demon(ctx, arg_name, arg_placement, arg_owner, arg_verifier, arg_difficulty, arg_level_id):
     global DEMONS
     DEMONS[arg_name] = {'placement':arg_placement,
                         'owner':arg_owner,
                         'verifier':arg_verifier,
                         'difficulty':arg_difficulty,
                         'level_id':arg_level_id}

As you can see, every dictionary adds to DEMONS is the same type, with the same keys, etc... But the values are different.

And I want it so that everytime I call this function, the dictionaries inside the "DEMONS" dictionary sort themselves. Like :

Before the function is called :

{
   'TEST_DEMON_2':
       {'placement': '2',
        'owner': 'Owner2',
        'verifier': 'Verifier2',
        'difficulty': 'Medium',
        'level_id': '2'},
   'TEST_DEMON_4':
       {'placement': '4',
        'owner': 'Owner4',
        'verifier': 'Verifier4',
        'difficulty': 'Medium',
        'level_id': '4'},
   'TEST_DEMON_3':
       {'placement': '3',
        'owner': 'Owner3',
        'verifier': 'Verifier3',
        'difficulty': 'Medium',
        'level_id': '3'},
   'TEST_DEMON_1':
       {'placement': '1',
        'owner': 'Owner1',
        'verifier': 'Verifier1',
        'difficulty': 'Easy',
        'level_id': '1'}
}

After the function was called

{
   'TEST_DEMON_1':
       {'placement': '1',
        'owner': 'Owner1',
        'verifier': 'Verifier1',
        'difficulty': 'Easy',
        'level_id': '1'},
   'TEST_DEMON_2':
       {'placement': '2',
        'owner': 'Owner2',
        'verifier': 'Verifier2',
        'difficulty': 'Medium',
        'level_id': '2'},
   'TEST_DEMON_3':
       {'placement': '3',
        'owner': 'Owner3',
        'verifier': 'Verifier3',
        'difficulty': 'Medium',
        'level_id': '3'},
   'TEST_DEMON_4':
       {'placement': '4',
        'owner': 'Owner4',
        'verifier': 'Verifier4',
        'difficulty': 'Medium',
        'level_id': '4'}
}

I want the function to sort every dictionary from 1 to "Infinity", based on their "placement" attribute. So every time I call the function, the first object inside "DEMONS", has the placement attribute set to 1, the second object inside "DEMONS" has the placement attribute set to 2, etc...

I don't know if it's possible, but if it is it would really help me.

Thanks

(If you need me to explain it more, ask me :D )

quamrana
  • 37,849
  • 12
  • 53
  • 71
Cold Fire
  • 91
  • 5
  • 2
    do you know that python dict are not ordered ? there is a special type for that called [`OrderedDict`](https://docs.python.org/fr/3/library/collections.html#collections.OrderedDict) in collections – Steven Aug 12 '21 at 13:17
  • 1
    @Steven: but since python 3.7 aren't `dict` and `OrderedDict` virtually the same thing? – quamrana Aug 12 '21 at 13:23
  • 1
    Does this answer your question? [How do I sort a dictionary by value?](https://stackoverflow.com/questions/613183/how-do-i-sort-a-dictionary-by-value) – quamrana Aug 12 '21 at 13:37

1 Answers1

0

You can get the order of the key with a sorted function for example :

a = {
    "TEST_DEMON_2": {
        "placement": "2",
        "owner": "Owner2",
        "verifier": "Verifier2",
        "difficulty": "Medium",
        "level_id": "2",
    },
    "TEST_DEMON_4": {
        "placement": "4",
        "owner": "Owner4",
        "verifier": "Verifier4",
        "difficulty": "Medium",
        "level_id": "4",
    },
    "TEST_DEMON_3": {
        "placement": "3",
        "owner": "Owner3",
        "verifier": "Verifier3",
        "difficulty": "Medium",
        "level_id": "3",
    },
    "TEST_DEMON_1": {
        "placement": "1",
        "owner": "Owner1",
        "verifier": "Verifier1",
        "difficulty": "Easy",
        "level_id": "1",
    },
}

sorted(a, key=lambda x: a[x]["placement"])
["TEST_DEMON_1", "TEST_DEMON_2", "TEST_DEMON_3", "TEST_DEMON_4"]
Steven
  • 14,048
  • 6
  • 38
  • 73