按字符串列表对字典列表进行排序

时间:2020-02-28 16:57:44

标签: python

如何使用预定的字符串列表对字典列表进行排序

字符串的有序列表

["Apple", "Watermellon", "Orange", "Grape"]

收集的词典数据

{
    "Grape": {"value": 3},
    "Watermellon": {"value": 5},
    "Orange": {"value": 8},
    "Apple": {"value": 1}
}

期望的字典顺序...假设我必须将其转换为某种形式的列表以保持顺序。

{
    "Apple": {"value": 1},
    "Watermellon": {"value": 5},
    "Orange": {"value": 8},
    "Grape": {"value": 3},
}

2 个答案:

答案 0 :(得分:5)

如果您不想依赖字典和python版本的插入顺序,可以将其转换为排序列表,例如:

order = ["Apple", "Watermellon", "Orange", "Grape"]

data = {
    "Grape": {"value": 3},
    "Watermellon": {"value": 5},
    "Orange": {"value": 8},
    "Apple": {"value": 1}
}

ordered_data = sorted(data.items(), key=lambda item: order.index(item[0]))
print(ordered_data)

>>> [('Apple', {'value': 1}), ('Watermellon', {'value': 5}), ('Orange', {'value': 8}), ('Grape', {'value': 3})]

答案 1 :(得分:2)

由于Python3.6Python3.7中的guaranteed),dict是按插入顺序排序的。

因此,一个简单的理解字典就可以解决问题:

print({key: d.get(key, {"value": 0}) for key in l})

如果您的密钥不存在,我会随意使用默认值。

对于3.6之前的版本,您可以使用OrderedDict

来源:Python doc

在字典上执行list(d)会以插入顺序返回字典中使用的所有键的列表