我想dict_list通過接收到的鍵串列 ( ) 對字典 ( ) 串列(也可以包含嵌套字典)進行排序groups。dicts 中的值通常可以是 None。
排序后,None值通常應放在最后一個位置。當我有以下組串列和字典串列時的示例
groups = ["key1", "key3.key4"]
dict_list = [
{
"key1": "abc",
"key2": "def",
"key3": {
"key4": "ghi"
},
"key5": {
"key6": "uvw"
}
},
{
"key1": "abc",
"key2": "asd",
"key3": {
"key4": "abc"
},
"key5": {
"key6": "uvw"
}
},
{
"key1": None,
"key2": "asd",
"key3": {
"key4": "abc"
},
"key5": {
"key6": "uvw"
}
},
{
"key1": "abc",
"key2": None,
"key3": None,
"key5": {
"key6": "uvw"
}
},
{
"key1": "xyz",
"key2": None,
"key3": {
"key4": "jklm"
},
"key5": {
"key6": "uvw"
}
},
{
"key1": "abc",
"key2": "dfd",
"key3": {
"key4": "ghi"
},
"key5": {
"key6": "ers"
}
}
]
我希望得到以下輸出:
dict_list = [
{
"key1": "abc",
"key2": "asd",
"key3": {
"key4": "abc"
},
"key5": {
"key6": "uvw"
}
},
{
"key1": "abc",
"key2": "def",
"key3": {
"key4": "ghi"
},
"key5": {
"key6": "uvw"
}
},
{
"key1": "abc",
"key2": "dfd",
"key3": {
"key4": "ghi"
},
"key5": {
"key6": "ers"
}
},
{
"key1": "abc",
"key2": None,
"key3": None,
"key5": {
"key6": "uvw"
}
},
{
"key1": "xyz",
"key2": None,
"key3": {
"key4": "jklm"
},
"key5": {
"key6": "uvw"
}
},
{
"key1": None,
"key2": "asd",
"key3": {
"key4": "abc"
},
"key5": {
"key6": "uvw"
}
}
]
我嘗試使用 pythons 串列排序函式和 itertools.groupby 來實作這個,但我似乎無法理解它。
提前致謝!
uj5u.com熱心網友回復:
嘗試:
def get_values_from_dict(d, keys):
out = []
for k in keys:
root = d
for kk in k.split("."):
root = root.get(kk)
if not root:
break
out.append(root)
return out
def key_function(lst):
return [(v is None, v) for v in lst]
print(
sorted(
dict_list, key=lambda d: key_function(get_values_from_dict(d, groups))
)
)
印刷:
[
{
"key1": "abc",
"key2": "asd",
"key3": {"key4": "abc"},
"key5": {"key6": "uvw"},
},
{
"key1": "abc",
"key2": "def",
"key3": {"key4": "ghi"},
"key5": {"key6": "uvw"},
},
{
"key1": "abc",
"key2": "dfd",
"key3": {"key4": "ghi"},
"key5": {"key6": "ers"},
},
{"key1": "abc", "key2": None, "key3": None, "key5": {"key6": "uvw"}},
{
"key1": "xyz",
"key2": None,
"key3": {"key4": "jklm"},
"key5": {"key6": "uvw"},
},
{
"key1": None,
"key2": "asd",
"key3": {"key4": "abc"},
"key5": {"key6": "uvw"},
},
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/527665.html
上一篇:在dictPython串列中搜索
