我正在学习处理字典,并且具有这样的结构:
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的结构可能存在问题,但是非常困难。任何帮助,将不胜感激。
答案 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。