对嵌套字典列表进行排序

时间:2019-06-06 09:25:07

标签: python sorting dictionary

我有一个很大的嵌套字典,需要对其中的数据进行排序和提取,但是我不确定如何解决该问题。这是dict形式:

mydict = {Person 1 : [{'2017-06-02': {'Country A': {'City 1': {'Population': '0', 'Temp': '10'}}}, '2016-06-02': {'Country B': {'City 2' :{'Population':'1'}}}]

我可以使用哪种方法按日期对列表进行排序并在之后进行遍历?

注意:实际的字典中有很多条目

2 个答案:

答案 0 :(得分:0)

不确定这是否是您要搜索的

mydict = {'Person 1' : [{'2017-06-02': {'Country A': {'City 1': {'Population': '0', 'Temp': '10'}}}, '2015-06-02': {'Country A': {'City 1': {'Population': '0', 'Temp': '10'}}}}]}

od = collections.OrderedDict(sorted(mydict["Person 1"][0].items()))

答案 1 :(得分:0)

我假设您只想对一个人的日期进行排序。我将使用sorted函数和指向字典键的key参数来返回列表。我很快将您的“ Person 1”键更改为字符串进行测试,只是将嵌套字典更改为字符串,在这里并不重要。

mydict = {'Person 1' : [{'2018-11-02': "more_dicts"},
                        {'2017-06-02': "more_dicts_here"}]
         }


def get_key(input_dict):
    return input_dict.keys()  # Returns key of dictionary

# Printing the result
print sorted(mydict['Person 1'], key=get_key)

# Adjusting the value of Person 1 if necessary
mydict['Person 1'] = sorted(mydict['Person 1'], key=get_key)

如果要为每个人执行此操作,则可以在上方使用此方法,并仅循环浏览字典的每个键。您也可以使用lambda函数代替此处定义的常规函数​​。

编辑:

这是一个示例,如果您想遍历每个人并使用lambda函数(而不是定义类似get_key的函数)

mydict = {'Person 1' : [{'2018-11-02': "more_dicts"},
                            {'2017-06-02': "more_dicts_here"}],
          'Person 2' : [{'2019-11-02': "more_dicts"},
                            {'2017-06-02': "more_dicts_here"}],
          'Person 3' : [{'2018-11-02': "more_dicts"},
                            {'2020-06-02': "more_dicts_here"}]
         }

for person in mydict.keys():
    mydict[person] = sorted(mydict[person], key=lambda x: x.keys())

print mydict