【发布时间】:2019-05-14 18:46:01
【问题描述】:
我有以下字典:
map = {'`s_h_o_seq_id`': 'STRING', '`s_h_o_identifier`': 'STRING', '`c`': 'STRING', '`c_system`': 'STRING', '`c_system_name`': 'STRING', '`display_name`': 'STRING', '`original_text`': 'STRING', '`status_c`': 'STRING', '`efc_time_high`': 'STRING', '`efc_time_low`': 'STRING', '`efc_time_v`': 'STRING', '`v_type`': 'STRING', '`v_text`': 'STRING', '`v_unit`': 'STRING', '`v_c`': 'STRING', '`v_c_system`': 'STRING', '`v_c_system_name`': 'STRING', '`v_c_display_name`': 'STRING', '`ctd_by`': 'STRING', '`ctd_date`': 'STRING', '`updtd_by`': 'STRING', '`updtd_date`': 'STRING', '`is_deleted`': 'STRING', '`pat_practice_id`': 'STRING', '`release`': 'STRING', '`section_name`': 'STRING', '`parent_entity_name`': 'STRING', '`class_c`': 'STRING', '`com_mood_c`': 'STRING', '`t_id_root`': 'STRING', '`t_id_extn`': 'STRING'}
我试图获取它的按键排序的条目列表,如下所示:
print(sorted(map.items(), key=lambda kv: (kv[0])))
打印出来:
[('`c_system_name`', 'STRING'), ('`c_system`', 'STRING'), ('`c`', 'STRING'), ('`class_c`', 'STRING'), ('`com_mood_c`', 'STRING'), ('`ctd_by`', 'STRING'), ('`ctd_date`', 'STRING'), ('`display_name`', 'STRING'), ('`efc_time_high`', 'STRING'), ('`efc_time_low`', 'STRING'), ('`efc_time_v`', 'STRING'), ('`is_deleted`', 'STRING'), ('`original_text`', 'STRING'), ('`parent_entity_name`', 'STRING'), ('`pat_practice_id`', 'STRING'), ('`release`', 'STRING'), ('`s_h_o_identifier`', 'STRING'), ('`s_h_o_seq_id`', 'STRING'), ('`section_name`', 'STRING'), ('`status_c`', 'STRING'), ('`t_id_extn`', 'STRING'), ('`t_id_root`', 'STRING'), ('`updtd_by`', 'STRING'), ('`updtd_date`', 'STRING'), ('`v_c_display_name`', 'STRING'), ('`v_c_system_name`', 'STRING'), ('`v_c_system`', 'STRING'), ('`v_c`', 'STRING'), ('`v_text`', 'STRING'), ('`v_type`', 'STRING'), ('`v_unit`', 'STRING')]
考虑上述输出列表中的前三个元组:
('`c_system_name`', 'STRING'), ('`c_system`', 'STRING'), ('`c`', 'STRING')
我希望它们以完全相反的顺序,即:
('`c`', 'STRING'), ('`c_system`', 'STRING'), ('`c_system_name`', 'STRING')
所以我试图去掉键中的那些单引号,以防它们造成麻烦:
sorted_map = sorted(map.items(), key=lambda kv: (kv[0][1:len(kv)-1]))
输出是:
[('`s_h_o_seq_id`', 'STRING'), ('`s_h_o_identifier`', 'STRING'), ('`c`', 'STRING'), ('`c_system`', 'STRING'), ('`c_system_name`', 'STRING'), ('`display_name`', 'STRING'), ('`original_text`', 'STRING'), ('`status_c`', 'STRING'), ('`efc_time_high`', 'STRING'), ('`efc_time_low`', 'STRING'), ('`efc_time_v`', 'STRING'), ('`v_type`', 'STRING'), ('`v_text`', 'STRING'), ('`v_unit`', 'STRING'), ('`v_c`', 'STRING'), ('`v_c_system`', 'STRING'), ('`v_c_system_name`', 'STRING'), ('`v_c_display_name`', 'STRING'), ('`ctd_by`', 'STRING'), ('`ctd_date`', 'STRING'), ('`updtd_by`', 'STRING'), ('`updtd_date`', 'STRING'), ('`is_deleted`', 'STRING'), ('`pat_practice_id`', 'STRING'), ('`release`', 'STRING'), ('`section_name`', 'STRING'), ('`parent_entity_name`', 'STRING'), ('`class_c`', 'STRING'), ('`com_mood_c`', 'STRING'), ('`t_id_root`', 'STRING'), ('`t_id_extn`', 'STRING')]
但这似乎把一切都搞砸了('s...' 出现在 'c...' 之前):
('`s_h_o_seq_id`', 'STRING'), ('`s_h_o_identifier`', 'STRING'), ('`c`', 'STRING')
为什么我的输出超过了输出,我怎样才能得到我想要的?
【问题讨论】:
-
不...我知道我可以使用
sorted(),这就是那个问题的答案。我的问题是为什么它对我/我的一组键不起作用,我在做什么错误。而且我确实犯了一个愚蠢的错误,即使用len(kv)而不是len(kv[0]),您可以在下面的 cmets 和答案中阅读。
标签: python python-3.x