@Este artigo vem do número público: csdn2299, como você pode prestar atenção à academia de programadores de números públicos
Este artigo descreve o método de classificação dos elementos do dicionário em uma lista pela programação em Python. Compartilhe com você para sua referência, da seguinte maneira:
Diretório de conteúdo:
- Origem do problema
- Classificar elementos do dicionário em uma lista
- Compare json (ignore a ordem dos dicionários na lista)
1. A origem do problema
objeto json a, b
a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'
b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'
Características: o valor da chave correspondente à chave no objeto Python correspondente a a eb - a lista contém os mesmos elementos do dicionário, mas a única diferença é a ordem. Se você ignorar a ordem, como julgar se os dois json são iguais. Como o próprio dicionário é classificado por chaves, a lista é classificada na ordem em que foi adicionada.Se você classificar os elementos do dicionário na lista, poderá classificar facilmente. Se a lista for um elemento comum (não um dicionário), você poderá ler a lista para classificar na combinação list (set ()) .Se a lista for um elemento de dicionário, você não poderá usar a combinação list (set ()).
>>> 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'
Sugere-se que o dicionário seja um tipo que não possa ser hash (elementos comuns que não são do dicionário podem ser facilmente classificados por hash).
A essência do problema é: como classificar os elementos do dicionário na lista.
Segundo, classifique os elementos do dicionário na lista
Felizmente, a lista classificou a função, tente
>>> 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
Pode-se ver que está bem, e pode-se ver que o princípio da classificação é o número de elementos.
Terceiro, compare o json (ignore a ordem do dicionário na lista)
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)
Detalhes: Ao escrever seu próprio formato json, a = "{'road': 1}" json.loads (a) está errado, você deve escrever a = '{"road: 1}' [As aspas simples estão fora]
Muito obrigado por ler a
universidade Quando optei por estudar python
sozinho, descobri que tinha uma base ruim do computador. Não tinha uma qualificação acadêmica. Isso não é o que fazer. Só posso compensar isso. Então, iniciei meu próprio contra-ataque fora da codificação e continuei aprendendo. Conhecimento básico do Python, estudo aprofundado do conhecimento básico de computador, resolvido, se você não estiver disposto a ser medíocre, junte-se a mim na codificação e continue a crescer!
Na verdade, não há apenas tecnologia aqui, mas também coisas além da tecnologia, Por exemplo, como ser um programador requintado, em vez de "pau de seda", o próprio programador é uma existência nobre, não é? [Clique para participar] Quer ser você mesmo, quer ser uma pessoa nobre, vamos lá!