如何按指定列表顺序提取元组键字典中的对应键值对?
解决方案
首先,你的原代码存在几个问题:
- 循环逻辑顺序错误:应该先遍历目标顺序列表,再筛选字典中匹配的项,而非反过来
- 变量名冲突:使用Python内置类型
list作为变量名,会覆盖内置类型,建议改为target_order这类名称 - 语法错误:
print(k1,k2 : ,k3)的冒号位置不符合Python语法规范
以下是两种可行的实现方式:
方式一:直接按顺序输出匹配的键值对
d = {(1,100) : 0.5 , (1,150): 0.7 ,(1,190) : 0.8, (2,100) : 0.5 , (2,120): 0.7 ,(2,150) : 0.8, (3,100) : 0.5 , (3,110): 0.7 ,(4,100) : 0.5 , (4,150): 0.7 ,(4,190) : 0.8,(5,100) : 0.5 , (5,150): 0.7} target_order = [4,2,1,3,5] # 遍历目标顺序中的每个元素 for num in target_order: # 筛选字典中键的第一个元素匹配的项 for key, value in d.items(): if key[0] == num: print(f"{key} : {value}", end=", ")
方式二:生成有序的结果结构(Python 3.7+)
如果需要将结果保存为有序字典(Python 3.7+版本的字典默认保留插入顺序),可以这样实现:
d = {(1,100) : 0.5 , (1,150): 0.7 ,(1,190) : 0.8, (2,100) : 0.5 , (2,120): 0.7 ,(2,150) : 0.8, (3,100) : 0.5 , (3,110): 0.7 ,(4,100) : 0.5 , (4,150): 0.7 ,(4,190) : 0.8,(5,100) : 0.5 , (5,150): 0.7} target_order = [4,2,1,3,5] ordered_result = {} for num in target_order: for key, value in d.items(): if key[0] == num: ordered_result[key] = value # 打印最终有序结果 print(ordered_result)
运行后会得到你需要的有序输出:{(4, 100): 0.5, (4, 150): 0.7, (4, 190): 0.8, (2, 100): 0.5, (2, 120): 0.7, (2, 150): 0.8, (1, 100): 0.5, (1, 150): 0.7, (1, 190): 0.8, (3, 100): 0.5, (3, 110): 0.7, (5, 100): 0.5, (5, 150): 0.7}
内容的提问来源于stack exchange,提问作者Felix Yosanto
相关产品推荐
相关产品推荐

