如何按顺序获取字典中的所有值?附示例JSON数据
嘿,这个问题在处理时间序列类的JSON数据时挺常见的。下面给你两种实用的解决方案,你可以根据自己的场景来选:
方法1:依赖Python 3.7+的字典有序性
从Python 3.7开始,标准的dict会严格保留键的插入顺序。如果你的JSON数据解析后,字典的键已经是你需要的时间先后顺序(就像你给出的示例那样),那直接用values()方法就能按顺序拿到所有值:
import json # 假设你的完整JSON数据存在这个字符串中 json_str = '''{ "count": { "2018-03-26 07": 4, "2018-03-26 08": 21, "2018-03-26 09": 34, ... } }''' # 解析JSON为Python字典结构 parsed_data = json.loads(json_str) count_dict = parsed_data['count'] # 获取按原顺序排列的所有值 ordered_values = list(count_dict.values()) print(ordered_values)
运行这段代码后,得到的列表会和你JSON里键的顺序完全对应。
方法2:按键的时间顺序排序(更稳妥)
如果你不确定原字典的键是否会保持顺序,或者需要严格保证按时间先后排序,那可以先把时间格式的键转换成可比较的时间对象,排序后再提取对应的值:
import json from datetime import datetime json_str = '''{ "count": { "2018-03-26 07": 4, "2018-03-26 08": 21, "2018-03-26 09": 34, ... } }''' parsed_data = json.loads(json_str) count_dict = parsed_data['count'] # 将字典项按时间键排序,再提取值 sorted_items = sorted( count_dict.items(), key=lambda item: datetime.strptime(item[0], '%Y-%m-%d %H') ) time_ordered_values = [item[1] for item in sorted_items] print(time_ordered_values)
这里用datetime.strptime把字符串格式的时间转换成datetime对象,确保排序逻辑完全符合时间的先后顺序,不管原字典的键顺序如何都能得到正确结果。
注:如果你用的是其他编程语言,思路类似——要么依赖语言本身的有序集合特性,要么提取键并按时间规则排序后取值。
内容的提问来源于stack exchange,提问作者Shivam Tripathi




