我有一些我想要排序的自定义对象和词典.我想将字典对象排序在一起.我想按属性和字典按键对对象进行排序.
object.name = 'Jack'
d = {'name':'Jill'}
sort_me =[object, d]
Run Code Online (Sandbox Code Playgroud)
如何使用对象的name属性和字典的'name'键对此列表进行排序?
你几乎肯定要找的是对sorted()使用key =选项,它提供了一个函数,它返回每个元素的任意排序键.此函数可以检查其参数的类型并执行各种操作.例如:
import types
class obj(object):
def __init__(self, arg):
self.name = arg
def extract_name(obj):
if type(obj) is types.DictType:
return obj['name']
else:
return obj.__dict__['name']
d = { 'name': 'Jill'}
print sorted([obj('Jack'), d], key=extract_name)
Run Code Online (Sandbox Code Playgroud)
可以在Python wiki上找到更多信息
RichieHindle建议使用isinstance是一个很好的建议.当我在它的时候,我认为支持任意元素名称而不是硬编码'name'可能会很好:
def extract_elem_v2(elem_name):
def key_extractor(obj):
dct = obj if isinstance(obj, dict) else obj.__dict__
return dct[elem_name]
return key_extractor
Run Code Online (Sandbox Code Playgroud)
您可以这样使用:
print sorted(list_of_stuff, key=extract_elem_v2('name'))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1940 次 |
最近记录: |