[英]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.