布尔检索,索引阶段
问题描述:
我正在做一个布尔检索项目,第一阶段是索引。我正试图建立一个倒排索引。说我有一个排序列表类似以下内容:我如何可以合并的项目布尔检索,索引阶段
list = [('a',1),('a',2),('a',3),('b',1),('b',2),('b',3)...]
,这样我可以得到一本字典一样以下,并保持排序:
dict = {'a':[1,2,3], 'b':[1,2,3]...}, thx a lot
答
你可以像下面这样做:
>>> import collections
>>> mylist = [('a',1),('a',2),('a',3),('b',1),('b',2),('b',3)]
>>> result = collections.defaultdict(list)
>>> for item in mylist:
result[item[0]].append(item[1])
>>> dict(result)
{'a': [1, 2, 3], 'b': [1, 2, 3]}
defaultdict(list)
创建其中键在第一接入初始化到对象字典使用作为参数传递的调用(在这种情况下创建list
)。它避免了必须检查密钥是否已经存在。
最后一行将defaultdict
转换为正常的dict
- 这不是严格必要的,因为defaultdict
的行为也像普通字典一样。
按照与原始列表相同的顺序将值附加到每个键。但是,密钥本身不会被排序(这是字典的属性)。
更新:如果你需要的字典键仍然归类为好,你可以这样做:
>>> import collections
>>> mylist = [('a',1),('a',2),('c',1),('c',2),('b',1),('b',2)]
>>> result = collections.OrderedDict()
>>> for item in mylist:
if item[0] not in result:
result[item[0]] = list()
result[item[0]].append(item[1])
>>> result
OrderedDict([('a', [1, 2]), ('c', [1, 2]), ('b', [1, 2])])
>>> result.keys()
['a', 'c', 'b']
显然,你不能在这种情况下使用dict(result)
作为dict
不保持任何特定的按键顺序。
thx为您的答复,其实我已经知道这种方法,我刚才给的样品并不是那么正确。尝试此示例,并检查字典是否仍然排序列表= [('&',9),(''',10),('(',5),('( ('''',5),('''',5),('''',6),('+ bahia',1), (''',5),('。',1),('。',9),(',',10), ('。',9),('。',10),('.125',10),('0.39',1),('0.99',5) ),('1',9),('1,655.8',6),('1,750',1),('1,780',1),('1,850',1),('1,870',1), ('1,875',1),('1,880',1),('1.06',1),('1.24',5)] – xlk3099 2013-03-03 03:10:14
啊,你想让字典键保持排序吗?将更新答案,然后... – isedev 2013-03-03 03:13:48
这真的很不错,thx很多:)。 – xlk3099 2013-03-03 03:25:41