リスト内の辞書要素をソートするPythonプログラミング方法

@この記事は公開番号から来ています:csdn2299、公開番号プログラマアカデミーに注意を払うことができるように

この記事では、Pythonプログラミングによってリスト内の辞書要素を並べ替える方法について説明します。次のように、参考のために共有してください。

コンテンツディレクトリ:

  1. 問題の原因
  2. リスト内の辞書要素を並べ替える
  3. jsonを比較する(リスト内の辞書の順序は無視してください)

1.問題の原因

jsonオブジェクトa、b

a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'
b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'

機能:aとbに対応するPythonオブジェクトのキーに対応するキー値-リストには同じディクショナリ要素が含まれていますが、違いは順序だけです。順序を無視する場合、2つのjsonが等しいかどうかを判断する方法。辞書自体はキーで並べ替えられるため、リストは追加された順に並べ替えられます。リスト内の辞書要素を並べ替えると、簡単に並べ替えることができます。リストが通常の要素(ディクショナリではない)である場合、リストを読み取ってリスト(セット())の組み合わせで並べ替えることができます。リストがディクショナリ要素である場合、リスト(セット())の組み合わせは使用できません。プロンプトを参照してください:

>>> 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'

辞書はハッシュできないタイプであることが推奨されます(一般的な非辞書要素はハッシュによって簡単にソートできます)。

次に、問題の本質は、リスト内の辞書要素をソートする方法です。

次に、リストの辞書要素を並べ替えます

幸い、リストにはソート機能があります。

>>> 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

わかりました。ソートの原則は要素の数であることがわかります。

3番目に、jsonを比較します(リスト内の辞書の順序は無視してください)

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)

詳細:独自のjson形式を作成する場合、a = "{'road':1}" json.loads(a)が間違っているため、a = '{"road:1}'を作成する必要があります[一重引用符は不要
です]
大学をお読みいただきありがとうございます
自分でpythonを勉強することを選択したとき、コンピューターの土台がおかしいこと気付きました。学業資格はありませんでした。これは何もすることはできません。それを補うことしかできないので、コーディング以外で自分の反撃を開始し、学び続けました。 Pythonコアナレッジ、コンピューターの基本的なナレッジの詳細な調査、並べ替え、平凡になりたくない場合は、コーディングに参加して成長を続けてください!
実際、ここにはテクノロジーだけでなく、テクノロジー以外のものもあります。たとえば、「コックシルク」ではなく優れたプログラマーになるには、プログラマー自体が高貴な存在ですよね。[クリックして参加]自分になりたい、高貴な人になりたい、是非ご参加ください!

元の記事を40件公開 14 件を賞賛 20,000回以上の閲覧

おすすめ

転載: blog.csdn.net/chengxun03/article/details/105497984