繁体   English   中英

Python:根据先前的列表顺序对字符串(列表)重新排序

[英]Python: reordering a string(list) based on a previous list order

我很沮丧,任何帮助都会很大,这比我的薪水等级还高:

我有一组键值,在识别时会提供一个数字。 使事情更复杂的是将它们标识为int或字符串。

目的是在处理新字符串时,应使用先前可能已定义的原始键顺序。 此外,值可能总是不同

这是从第一个字符串获得的信息的示例:

import re
int_dict = {}
string_dict = {}
int_number = 1
string_number = 1
firstlist = "key_a=apples key_z=4 key_e=pears key_b=bananas key_r=3"
re_result = re.findall(r'(\w+)=(\w+)', firstlist)
for i in re_result:
   if i[1].isdigit():
        int_dict[int_number] = i[0]
        int_number += 1
   else:
        string_dict[string_number] = i[0]
        string_number += 1

print int_dict
>>> {1: 'key_z', 2: 'key_r'}
print string_dict
>>> {1: 'key_a', 2: 'key_e', 3: 'key_b'}

第二行可能如下:

secondstring = "key_r=54 key_a=grapes key_b=nuts key_z=7 key_r=22"

我想根据前一个字符串对字符串进行重新排序,在第二个字符串中,还有一个新的键,该键应根据其整数或字符串取下一个增量:

secondstring_reordered = "key_a=grapes key_z=7 key_b=nuts key_r=22 key_z=7"

使用第一个字符串首先创建一个字典,其中key是字符串中的key,value是firstlist.split()返回的列表中该项目的索引。

>>> d = {item.split('=', 1)[0]:i for i, item in enumerate(firstlist.split())}
>>> d
{'key_e': 2, 'key_b': 3, 'key_a': 0, 'key_r': 4, 'key_z': 1}

现在,使用此字典,您可以对secondstring.split()返回的列表进行排序,然后使用str.join将其重新加入:

>>> ' '.join(sorted((item for item in secondstring.split()),
                                                 key=lambda x:d[x.split('=',1)[0]]))
'key_a=grapes key_z=7 key_b=nuts key_r=54 key_r=22'

如果您确定字符串中的值永远不会包含=则可以将item.split('=', 1)x.split('=',1)[0]更改为item.split('=')[1]x.split('=')[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM