我有一个嵌套词典:
nestedDict = defaultdict(lambda:defaultdict(list))
它具有以下形式的值:
termId: {
'docId': [position1, position2, position3, position4],
'docId': [position1, position2, position3, position4]
}
例如:
95074715468325493716883841120098961347 defaultdict(<class 'list'>,
{'193083866963132215734985636049608586841': [1922, 1948, 1952, 1954],
'39188502589169058624219974133946618900': [1922, 1948, 1952, 1954]})
我希望以docId为基础按升序排序
例如:
1: {1:[1,2,3],2:[1,3,4],3:[1,3,4]} //docId should be in ascending order in each row
2: {1:[1,2,3],2:[1,3,4],3:[1,3,4]}
我正在尝试这个:
orderedDict = OrderedDict(sorted(nestedDict.items(), key=lambda t: nestedDict[1][0]))
我知道这是错的,但我不知道如何做对。我是python的新手。请问这个基本问题。
答案 0 :(得分:1)
<强>鉴于强>
import collections as ct
nested_dict = ct.defaultdict(lambda: ct.defaultdict(list))
d = {95074715468325493716883841120098961347:
{
"193083866963132215734985636049608586841": [1922, 1948, 1952, 1954],
"39188502589169058624219974133946618900": [1921, 1948, 1952, 1954],
"100" : [1923, 1948, 1952, 1954],
}
}
nested_dict.update(d)
<强>代码强>
>>> {k: ct.OrderedDict(sorted(v.items(), key=lambda x: float(x[0]))) for k, v in nested_dict.items()}
{95074715468325493716883841120098961347: OrderedDict([
('100', [1923, 1948, 1952, 1954]),
('39188502589169058624219974133946618900', [1921, 1948, 1952, 1954]),
('193083866963132215734985636049608586841', [1922, 1948, 1952, 1954])])}
<强>详情
OrderedDict
的代码通过键对内部字典进行排序。注意:这些键是数字字符串,因此使用内置float()
进行排序:示例:
inner_dict = {
"200": [],
"300": [],
"100": [],
}
ct.OrderedDict(sorted(inner_dict.items(), key=lambda x: float(x[0])))
# OrderedDict([('100', []), ('200', []), ('300', [])])
剩下的字典理解重建围绕这些排序的词典的字典。如果您希望保留外部defaultdict
类型,请相应地重建:
rebuilt_dict = ct.defaultdict(list)
for k, v in nested_dict.items():
rebuilt_dict[k] = ct.OrderedDict(sorted(v.items(), key=lambda x: float(x[0])))
rebuilt_dict