繁体   English   中英

如何按相对日期值对字典列表进行排序?

[英]How to sort a list of dictionaries by relative date values?

我的代码是:

a = {"key1": 5 , "key2": "8 hours ago", "key3": 2}
b = {"key1": 7 , "key2": "42 hours ago", "key3": 9}
c = {"key1": 6 , "key2": "1 hour ago", "key3": 1}
undecorated = [a, b, c]

undecorated.sort(key=operator.itemgetter('key2'))

结果是:

[
{"key1": 6 , "key2": "1 hour ago", "key3": 1}
{"key1": 7 , "key2": "42 hours ago", "key3": 9}
{"key1": 5 , "key2": "8 hours ago", "key3": 2}
]

但结果需要:

[
{"key1": 6 , "key2": "1 hour ago", "key3": 1}
{"key1": 5 , "key2": "8 hours ago", "key3": 2}
{"key1": 7 , "key2": "42 hours ago", "key3": 9}
]

如果key2的值与此处显示的规则相同,则可以执行以下操作:

undecorated.sort(key=lambda d: int(d['key2'].split()[0]))

正如评论中已经解释的那样,由于您的比较键是字符串,因此按字典顺序对它们进行比较。 您可以使用dateparser模块( pip install dateparser )将字符串解析为正确比较的datetime对象:

>>> from dateparser import parse
>>> undecorated.sort(key=lambda x: parse(x["key2"]), reverse=True)
>>> undecorated
[{'key1': 6, 'key2': '1 hour ago', 'key3': 1}, {'key1': 5, 'key2': '8 hours ago', 'key3': 2}, {'key1': 7, 'key2': '42 hours ago', 'key3': 9}]

由于比较键有点复杂,因此我更喜欢使其成为一个函数而不是lambda,它可以包含try-except,并且更具可读性:

a = {"key1": 5, "key2": "8 hours ago", "key3": 2}
b = {"key1": 7, "key2": "42 hours ago", "key3": 9}
c = {"key1": 6, "key2": "1 hour ago", "key3": 1}
undecorated = [a, b, c]


def compare_key(my_dict):
    value = my_dict.get('key2')
    try:
        result = int(value.split()[0])
    except:
        result = 0
    return result


undecorated.sort(key=compare_key)

print(undecorated)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM