我很难过,任何帮助都会很棒,这远高于我的薪水等级:
我有一串键值,在识别时会提供一个数字。更复杂的是它们被识别为int或string。
目标是当处理新字符串时,它应该使用先前可能已经定义的原始密钥顺序。此外,价值可能总是不同
以下是从第一个字符串中获取的信息示例:
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"
我希望字符串基于前一个字符串重新排序,在第二个字符串中还有一个新键,如果它是一个int或字符串,它应该只取下一个增量:
secondstring_reordered = "key_a=grapes key_z=7 key_b=nuts key_r=22 key_z=7"
答案 0 :(得分:1)
首先使用第一个字符串创建一个字典,其中键是字符串中的键,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]
分别