我创建了字典:
listing = {'2': 'Mary Lejam', '3': 'Zachery Aka', '1': 'John Joer', '4': 'Joe Private', '10': 'Carla Chris'}
我正在编写一个简单的程序,该程序根据键(即id)对名称进行排序,并根据姓氏进行排序 我用字典的键找出id。但是现在我正在尝试寻找一种对姓氏进行排序的方法。
我尝试导入re,例如itemgetter(re.match(regex))
,但出现错误
我想知道是否有可能使用itemgetter并在其中写入一些正则表达式来忽略姓氏之前的所有内容。它将基本上忽略掉空格之前的所有内容。
LastName = sorted(listing.values(), key=itemgetter(Some Regex))
答案 0 :(得分:0)
一种方法是拆分和重新组装:
listing = {'2': 'Mary Lejam', '3': 'Zachery Aka', '1': 'John Joer', '4': 'Joe Private', '10': 'Carla Chris'}
import operator
sorted(({k:[v.split(' ')[1], v.split(' ')[0]] for k,v in listing.items()}).items(), key=operator.itemgetter(1))
[('3', ['Aka', 'Zachery']),
('10', ['Chris', 'Carla']),
('1', ['Joer', 'John']),
('2', ['Lejam', 'Mary']),
('4', ['Private', 'Joe'])]
listing = {i[0]:' '.join([i[1][1], i[1][0]]) for i in temp}
{'3': 'Zachery Aka',
'10': 'Carla Chris',
'1': 'John Joer',
'2': 'Mary Lejam',
'4': 'Joe Private'}
但是一般来说Python dictionaries are unsorted,如果您确实需要排序的数据结构,则不应该使用字典。
答案 1 :(得分:0)
itemgetter
在这里并不是特别有用,因为您需要对返回值做进一步的工作,并且Python无法直接构成函数。
sorted(listing.items(), key=lambda x: x[1].split()[1])
如果有 函数组成,例如,因为您使用的是toolz
包,则可以编写
from toolz import compose
# Equivalent functions, but names reflect different *purposes*
get_name = get_last_name = itemgetter(1)
split_name = methodcaller('split')
sorted(listing.items(), key=compose(get_last_name, split_name, get_name))