尝试对字典键进行排序时发生TypeError

时间:2019-07-02 17:47:38

标签: python

我正在学习处理字典,并且具有这样的结构:

DATA = {
    'ATL': {
        '2019': {
            'status': 'inactive',
            'abbr': 'ATL',
            'city': 'Atlanta'},
        '2016': {
            'status': 'active',
            'abbr': 'ATL',
            'city': 'Atlanta'},
        '2018': {
            'status': 'inactive',
            'abbr': 'ATL',
            'city': 'Atlanta'},
        '2017': {
            'status': 'active',
            'abbr': 'ATL',
            'city': 'Atlanta'}
        }
    }

这是按年份排序的一种尝试:

sorted_keys = sorted(DATA['ATL'].keys())

每次我得到TypeError: '<' not supported between instances of 'int' and 'str'。当我打印键时,它只返回我认为是“ int”的年份,对吗?由于我刚开始使用dict,因此我很清楚dict的结构可能存在问题,但是非常困难。任何帮助,将不胜感激。

4 个答案:

答案 0 :(得分:3)

首先请注意,如果您想按键对实际词典进行排序,则不仅要对键进行馈送,还要sorted整个字典。

DATA.items()将返回key / value元组。在这种情况下,您必须指定要根据哪些条件进行排序。为此,您可以在key中使用sorted参数:

dict(sorted(DATA['ATL'].items(), key=lambda x: int(x[0])))

{'2016': {'status': 'active', 'abbr': 'ATL', 'city': 'Atlanta'},
 '2017': {'status': 'active', 'abbr': 'ATL', 'city': 'Atlanta'},
 '2018': {'status': 'inactive', 'abbr': 'ATL', 'city': 'Atlanta'},
 '2019': {'status': 'inactive', 'abbr': 'ATL', 'city': 'Atlanta'}}

还请注意,建议将其强制转换为int,否则排序过程将按字典顺序进行,在这种情况下这可能不是问题,但这样做通常更安全(不确定范围年,但按字典顺序排序会产生意外结果,例如950> 2019)

这还将防止您收到错误,该错误似乎是由于键中混合了数据类型而造成的。

答案 1 :(得分:0)

我遵循了您的示例,并使用了

的字典
DATA = {'ATL': {'2016': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'active'},
  '2017': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'active'},
  '2018': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'inactive'},
  '2019': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'inactive'}}}

并排序

sorted_keys = sorted(DATA['ATL'].keys())

sorted_keys的输出为

['2016', '2017', '2018', '2019']

似乎是您想要的。问题是,您必须注意,年份实际上是字符串,而不是整数。因此,如果要以整数格式列出年份,可以执行以下操作

nums = [int(year) for year in sorted_keys]

这将为您提供不会引发TypeError异常的整数形式的年份列表。

答案 2 :(得分:0)

您必须将键转换为整数:

sorted_keys = sorted([int(i) for i in DATA['ATL'].keys()])

答案 3 :(得分:0)

您的代码似乎是正确的。我尝试了以下方法。

用作输入。

DATA = {
'ATL': {
    '2019': {
        'status': 'inactive',
        'abbr': 'ATL',
        'city': 'Atlanta'},
    '2016': {
        'status': 'active',
        'abbr': 'ATL',
        'city': 'Atlanta'},
    '2018': {
        'status': 'inactive',
        'abbr': 'ATL',
        'city': 'Atlanta'},
    '2017': {
        'status': 'active',
        'abbr': 'ATL',
        'city': 'Atlanta'}
    }
}

执行了代码。

sorted_keys = sorted(DATA['ATL'].keys())
sorted_keys

我得到以下输出

['2016', '2017', '2018', '2019']

也许您还有其他代码行给出了错误信息?

如果您只想以一种排序的方式输出键,这应该可以工作。但是,如果您希望对字典进行排序,它将无法正常工作。 dict无法保留顺序。您将必须使用OrderedDict