【问题标题】:How to sort lists within a dictionary in python?如何在python中对字典中的列表进行排序?
【发布时间】:2019-01-30 11:23:48
【问题描述】:

我有以下字典以 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 循环?

【问题讨论】:

  • 无论你应用的逻辑是否正确,甚至已经很简单?
  • 是的,但实际上我的字典非常大,迭代字典中的每个项目需要很多时间......
  • 然后使用生成器来管理负载/内存。

标签: python sorting dictionary


【解决方案1】:
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

不确定它是否更优雅,但我会怎么做。

【讨论】:

  • 这对“values”和“related_items”都进行了排序——这不是我所期望的——我想对“values”进行排序并使用它来重新排序“related_items”
  • 错过了那一点,我会删除那里的答案
  • 取消删除可能更好的选择
猜你喜欢
  • 2011-12-22
  • 2016-06-11
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多