按指定键列表筛选并排序字典键及SyntaxError语法错误修复
修复语法错误并实现指定键筛选+按值升序排序
问题分析
你写的代码里sorted那行的语法完全错误:
D.get()的参数应该是字典的键,不是lambda表达式,更不能嵌套生成器写法- 没有先从字典里筛选出
result列表中指定的键,直接对整个字典的键排序不符合需求
修复方案
先筛选出result列表里存在于字典D中的键,再对这些按键对应的值升序排序。具体代码如下:
def main(): D ={'acct_number':10202,'acct_name':'abc','v1_rev':200,'v2_rev':210,'v4_rev':2,'v5_rev':200,'v6_rev':210,'v7_rev':60000000,'v3_rev':2000} result = ['v1_rev', 'v5_rev', 'v2_rev', 'v6_rev'] # 筛选出result中存在于字典D的键,避免键不存在报错 filtered_keys = [key for key in result if key in D] # 按对应值升序排序,相同值保持原列表顺序(稳定排序) sorted_keys = sorted(filtered_keys, key=lambda k: D[k]) print(sorted_keys) if __name__ == '__main__': main()
代码说明
- 筛选指定键:用列表推导式精准筛选出你需要的键,同时加入
if key in D的判断,避免因result里的键不在字典中引发报错。 - 按值排序:
sorted的key参数通过lambda k: D[k]指定按照键对应的值排序,默认就是升序规则;如果多个键对应的值相同,会保持它们在原筛选列表中的顺序。
运行结果
执行后输出:
['v1_rev', 'v5_rev', 'v2_rev', 'v6_rev']
完全符合需求:仅包含指定列表的键,且按值从小到大排序(v1_rev、v5_rev值为200,v2_rev、v6_rev值为210)。
内容的提问来源于stack exchange,提问作者pbh
相关产品推荐
相关产品推荐

