0
我正在做一個布爾檢索項目,第一階段是索引。我正試圖建立一個倒排索引。說我有一個排序列表類似以下內容:我如何可以合併的項目布爾檢索,索引階段
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
我正在做一個布爾檢索項目,第一階段是索引。我正試圖建立一個倒排索引。說我有一個排序列表類似以下內容:我如何可以合併的項目布爾檢索,索引階段
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