簡體   English   中英

如何在python中對字典中的列表進行排序?

[英]How to sort lists within a dictionary in python?

我有以下字典表示 json 格式的數據:

{'0': {'related_items': [6, 7],
  'values': [0.8111071056538126, 0.8660254037844388]},
 '1': {'related_items': [5, 8],
  'values': [0.9999999999999998, 0.7071067811865475]},
 '222': {'related_items': [], 'values': []},
 '33': {'related_items': [], 'values': []},
 '44': {'related_items': [99], 'values': [0.7071067811865475]},
 '5': {'related_items': [1, 8],
  'values': [0.9999999999999998, 0.7071067811865475]},
 '6': {'related_items': [0, 7, 99],
  'values': [0.8111071056538126, 0.936585811581694, 0.8111071056538126]},
 '7': {'related_items': [0, 6, 99],
  'values': [0.8660254037844388, 0.936585811581694, 0.8660254037844388]},
 '8': {'related_items': [1, 5],
  'values': [0.7071067811865475, 0.7071067811865475]},
 '99': {'related_items': [44, 6, 7],
  'values': [0.7071067811865475, 0.8111071056538126, 0.8660254037844388]}}

我想根據values列表的順序(遞減)對related_items列表進行排序:例如,對於項目 '0',列表將按如下方式排序:{'0': {'related_items': [7, 6] , '值': [0.8660254037844388,0.8111071056538126]}...

for i, j in json_data.items():
    r = j['related_items']
    s = j['values']
    if r:
        sim_final, rel_final = (list(t) for t in zip(*sorted(zip(s, r),reverse=True)))
        json_data[i]['values']=sim_final
        json_data[i]['related_items']=rel_final

預期輸出:

{'0': {'related_items': [7, 6],
  'values': [0.8660254037844388, 0.8111071056538126]},
 '1': {'related_items': [5, 8],
  'values': [0.9999999999999998, 0.7071067811865475]},
 '222': {'related_items': [], 'values': []},
 '33': {'related_items': [], 'values': []},
 '44': {'related_items': [99], 'values': [0.7071067811865475]},
 '5': {'related_items': [1, 8],
  'values': [0.9999999999999998, 0.7071067811865475]},
 '6': {'related_items': [7, 99, 0],
  'values': [0.936585811581694, 0.8111071056538126, 0.8111071056538126]},
 '7': {'related_items': [6, 99, 0],
  'values': [0.936585811581694, 0.8660254037844388, 0.8660254037844388]},
 '8': {'related_items': [5, 1],
  'values': [0.7071067811865475, 0.7071067811865475]},
 '99': {'related_items': [7, 6, 44],
  'values': [0.8660254037844388, 0.8111071056538126, 0.7071067811865475]}}

我的實際字典非常大。 如何簡化上述代碼中的for循環?

for k, v in json_data.items():
    x = v["related_items"]
    x.sort(reverse=True)
    y = []
    for i in x:
        y.append(v["values"][v["related_items"].index(i)])
    v["related_items"] = x
    v["values"] = y

不確定它是否更優雅,但我會怎么做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM