Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按不总是有属性对对象dict排序_Python_Sorting - Fatal编程技术网

Python 按不总是有属性对对象dict排序

Python 按不总是有属性对对象dict排序,python,sorting,Python,Sorting,我想用python对对象字典进行排序。这些对象有一个属性,我们称之为“架构”。所以,为了给我的口述分类,我做了以下几点: data.sort(key=attrgetter('architecture')) 到目前为止还不错 但是,有些对象不能具有属性“architecture”(有时是,有时否),python控制台会引发AttributeError异常 因此,我的问题是,当某些对象没有要排序的属性时,如何按属性对对象字典进行排序?假设要将没有属性的对象放在最后 from operator im

我想用python对对象字典进行排序。这些对象有一个属性,我们称之为“架构”。所以,为了给我的口述分类,我做了以下几点:

data.sort(key=attrgetter('architecture'))
到目前为止还不错

但是,有些对象不能具有属性“architecture”(有时是,有时否),python控制台会引发AttributeError异常


因此,我的问题是,当某些对象没有要排序的属性时,如何按属性对对象字典进行排序?

假设要将没有属性的对象放在最后

from operator import attrgetter

data_with_attr = list(d for d in data.values() if hasattr(d, 'architecture'))
data_with_attr.sort(key=itemgetter('architecture'))
data_with_attr += list(d for d in data.values() if not hasattr(d, 'architecture'))

我不确定我是否正确理解了对象字典。

检查对象是否具有属性,并根据您希望将不具有属性的对象排序到的位置使用
float(“inf”)
float(“-inf”)

srt = sorted(d,key=lambda x: d[x].architecture if hasattr(d[x], "architecture") else float("inf"))
如果需要键和值使用项:

srt= (sorted(d.items(),key=lambda x: x[1].architecture if hasattr(x[1], "architecture") else float("inf")))

dicts没有一个
.sort
方法

我讨厌,我不能只是评论

你想怎样给字典分类?字典使用散列来访问键,因此在对键进行迭代时,顺序取决于键散列,而不是键本身。因此,字典(通常)不提供排序

但是,关于您最初的问题(我现在将其投射到
(键、值)
-列表中),这是怎么回事:

ndata = sorted((tpl for tpl in data if hasattr(tpl[0], 'architecture')),
               key=lambda x: getattr(tpl[0], 'architecture'))
# if you want to add those entries, not having 'architecture':
ndata += list(set(data) - set(ndata))

现在的问题是:在不包含
'architecture'
-字段的情况下,您希望如何处理这些条目。

能否添加您正在尝试使用的示例词典?您希望如何首先对没有属性的条目进行排序?最后的排除?您可以测试hasattr并使用一些默认值(
None
?)使用if/else、try/except块?