Maison >développement back-end >Tutoriel Python >Explication détaillée de la façon de trier les éléments du dictionnaire dans une liste à l'aide de la programmation Python
Cet article présente principalement la méthode Pythonprogrammation de tri des éléments de dictionnaire dans une liste, impliquant les compétences opérationnelles de Python liées au parcours, à la lecture et à la conversion des éléments de liste et de dictionnaire, amis. qui en a besoin peuvent se référer à
L'exemple de cet article décrit la méthode de tri des éléments du dictionnaire dans une liste à l'aide de la programmation Python. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Répertoire de contenu :
1 Origine du problème
2. la liste
3. Comparez json (en ignorant l'ordre des dictionnaires dans la liste)
Origine du problème
jsonObjecta,b
a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}' b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'
Fonctionnalités : Les valeurs clés correspondant aux clés dans les objets Python correspondant à a et b - la liste contient les mêmes éléments du dictionnaire, mais la seule différence est l'ordre. Comment savoir si deux json sont égaux si l'ordre est ignoré. Étant donné que le dictionnaire lui-même se trie par clé et que la liste est triée par ordre de jointure, elle peut être facilement triée si vous triez les éléments du dictionnaire dans la liste. Si la liste contient des éléments ordinaires (pas un dictionnaire), la liste peut être lue et triée via la combinaison de list(set()). Cependant, si la liste contient des éléments de dictionnaire. , list(set not be used) ()), combinaison, voir l'invite :
>>> a = [{'a':1, 'b':2}, {'c':3}] >>> a [{'a': 1, 'b': 2}, {'c': 3}] >>> b = set(a) Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> b = set(a) TypeError: unhashable type: 'dict'
L'invite est que le dictionnaire est un type qui ne peut pas être haché (non ordinaire -Les éléments du dictionnaire peuvent être facilement hachés) triés).
Ensuite, l'essence du problème est : comment trier les éléments du dictionnaire dans la liste.
2. Trier les éléments du dictionnaire dans la liste
Heureusement, la liste a le tried fonction , essayez
>>> p = [{'b': 2}, {'a': 1, 'c': 3}] >>> q = [{'a': 1, 'c': 3}, {'b': 2}] >>> p [{'b': 2}, {'a': 1, 'c': 3}] >>> q [{'a': 1, 'c': 3}, {'b': 2}] >>> pp = sorted(p) >>> qq = sorted(q) >>> pp [{'b': 2}, {'a': 1, 'c': 3}] >>> qq [{'b': 2}, {'a': 1, 'c': 3}] >>> pp == qq True >>> p == q False
et vous voyez que c'est ok, et vous voyez que le principe du tri c'est le nombre d'éléments.
3. Comparez json (en ignorant l'ordre des dictionnaires dans la liste)
import json def compare_json(a, b): aa = json.loads(a) bb = json.loads(b) len_a = len(aa) len_b = len(bb) if len_a != len_b: return False else: for key in aa: if not bb.has_key(key): return False else: if sorted(aa[key]) != sorted(bb[key]): return False return True if name == "main": a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}' b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}' print compare_json(a, b)
Détails : Lorsque vous écrivez vous-même le format json, a = "{'road':1}" json.loads(a) est incorrect, vous devez l'écrire sous la forme a = '{"road:1}' [les guillemets simples sont exclu]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!