Python中对列表内多字符串按指定键序排序的技术问题
解决方案:批量处理多字符串的键值对排序
没问题!你已经搞定了单个字符串的排序逻辑,现在只需要把这个逻辑封装成函数,然后遍历整个列表批量处理就可以了——而且还能自动处理重复键(比如第二个元素里的两个MN)的情况,完美适配你的需求。
完整代码示例
data = ['ID:123 GE:m FN:Amir LN:Maleki MN:0400101010 EM:a@b.c ST:VIC', 'ID:b22 EM:b@d.c ST:VIC GE:F FN:Miniyi LN:Li MN:0430101210 MN:0432101215', 'ID:153 GE:m FN:John LN:Liu MN:040181010 ST:NSW EM:d@b.c'] key_order = ['ID', 'GE', 'FN', 'LN', 'MN', 'EM', 'ST'] def sort_key_value_pairs(input_str): # 把字符串拆成单个键值对的列表 kv_pairs = input_str.split() # 按照key_order的索引排序,重复键会保留原有顺序 sorted_pairs = sorted(kv_pairs, key=lambda x: key_order.index(x.split(':')[0])) return sorted_pairs # 处理整个data列表,得到排序后的键值对列表集合 result = [sort_key_value_pairs(item) for item in data] # 如果需要把每个结果还原成空格分隔的字符串,用下面这行 # result = [' '.join(sort_key_value_pairs(item)) for item in data] print(result)
代码解释
- 封装排序逻辑:把单个字符串的排序步骤写成函数
sort_key_value_pairs,方便批量调用和维护 - 遍历批量处理:用列表推导式遍历
data中的每一个字符串,对每个字符串应用排序函数,一步完成所有元素的处理 - 兼容重复键:因为
key_order.index()会返回第一个匹配键的索引,所以相同key的键值对(比如两个MN)会保持它们在原始字符串中的相对顺序,不会打乱原有排列 - 灵活输出格式:如果需要和原始格式一致的空格分隔字符串,只需要用
' '.join()把排序后的列表重新拼接成字符串即可
输出结果
如果选择返回列表形式,输出会是:
[ ['ID:123', 'GE:m', 'FN:Amir', 'LN:Maleki', 'MN:0400101010', 'EM:a@b.c', 'ST:VIC'], ['ID:b22', 'GE:F', 'FN:Miniyi', 'LN:Li', 'MN:0430101210', 'MN:0432101215', 'EM:b@d.c', 'ST:VIC'], ['ID:153', 'GE:m', 'FN:John', 'LN:Liu', 'MN:040181010', 'EM:d@b.c', 'ST:NSW'] ]
如果选择还原成字符串,输出会是:
[ 'ID:123 GE:m FN:Amir LN:Maleki MN:0400101010 EM:a@b.c ST:VIC', 'ID:b22 GE:F FN:Miniyi LN:Li MN:0430101210 MN:0432101215 EM:b@d.c ST:VIC', 'ID:153 GE:m FN:John LN:Liu MN:040181010 EM:d@b.c ST:NSW' ]
内容的提问来源于stack exchange,提问作者KenjiChan1212
相关产品推荐
相关产品推荐

