Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon de trier les éléments du dictionnaire dans une liste à l'aide de la programmation 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

黄舟
黄舟original
2017-05-28 11:12:172109parcourir

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: &#39;dict&#39;

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 = [{&#39;b&#39;: 2}, {&#39;a&#39;: 1, &#39;c&#39;: 3}]
>>> q = [{&#39;a&#39;: 1, &#39;c&#39;: 3}, {&#39;b&#39;: 2}]
>>> p
[{&#39;b&#39;: 2}, {&#39;a&#39;: 1, &#39;c&#39;: 3}]
>>> q
[{&#39;a&#39;: 1, &#39;c&#39;: 3}, {&#39;b&#39;: 2}]
>>> pp = sorted(p)
>>> qq = sorted(q)
>>> pp
[{&#39;b&#39;: 2}, {&#39;a&#39;: 1, &#39;c&#39;: 3}]
>>> qq
[{&#39;b&#39;: 2}, {&#39;a&#39;: 1, &#39;c&#39;: 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 = &#39;{"ROAD": [{"id": 123}, {"name": "no1"}]}&#39;
  b = &#39;{"ROAD": [{"name": "no1"}, {"id": 123}]}&#39;
  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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn