我创建了一本字典:
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))
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))
一种方法是拆分和重组:
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,如果你真的需要一个排序的数据结构,你不应该使用dict。