如何将带key的object转为list 按键查值并按row排序
以下演示基于Python实现,先将你给出的结构修正为可直接运行的标准字典列表格式(原始写法键缺少引号,无法直接运行):
data_list = [ {"name": "test1", "id": "something", "row": 1}, {"name": "test3", "id": "something", "row": 3}, {"name": "test2", "id": "something", "row": 2}, {"name": "test4", "id": "something", "row": 4} ]
1. 带key的object(字典)转list
根据转换目标不同,有三种常用写法:
- 提取字典所有值组成列表:调用字典的
values()方法,直接转list即可demo_obj = {"name": "test1", "id": "something", "row": 1} value_list = list(demo_obj.values()) # 运行结果:['test1', 'something', 1] - 提取字典所有键值对组成元组列表:调用
items()方法kv_list = list(demo_obj.items()) # 运行结果:[('name', 'test1'), ('id', 'something'), ('row', 1)] - 提取列表中所有对象的指定key对应值,组成新列表:用列表推导式即可,比如提取所有name字段
all_names = [item["name"] for item in data_list] # 运行结果:['test1', 'test3', 'test2', 'test4']
2. 根据key查找对应值
以「获取row值为3的项对应的name字段值」为例,两种常用实现:
- 遍历匹配(兼容性最好,逻辑直观)
target_name = None for item in data_list: if item["row"] == 3: target_name = item["name"] break # 最终target_name结果为'test3' - 生成器表达式简写(适合确定匹配项存在的场景)
注意:如果列表中没有符合条件的项,该简写方法会抛出StopIteration异常,不确定匹配结果时可给next加默认值:target_name = next(item["name"] for item in data_list if item["row"] == 3)next((item["name"] for item in data_list if item["row"] == 3), None),找不到匹配时会返回None。
3. 按照row字段对list排序
直接用Python内置排序方法,通过key参数指定排序依据即可:
- 生成排序后的新列表,不修改原数据(默认升序)
排序后结果:sorted_list = sorted(data_list, key=lambda x: x["row"])[ {"name": "test1", "id": "something", "row": 1}, {"name": "test2", "id": "something", "row": 2}, {"name": "test3", "id": "something", "row": 3}, {"name": "test4", "id": "something", "row": 4} ] - 如需降序排列,添加
reverse=True参数sorted_list_desc = sorted(data_list, key=lambda x: x["row"], reverse=True) - 直接在原列表上排序,不生成新列表,调用列表自带的
sort()方法data_list.sort(key=lambda x: x["row"])
内容的提问来源于stack exchange,提问作者vb381
相关产品推荐
相关产品推荐

