簡體   English   中英

將兩個列表轉換為帶有值作為列表的字典

[英]Convert two lists to dictionary with values as list

我可以將兩個列表轉換成字典

>>> keys = ['a', 'b', 'c']
>>> values = [1, 2, 3]
>>> dictionary = dict(zip(keys, values))
>>> print dictionary

如何使用鍵但值作為列表將其轉換為字典。

keys = ['a', 'b', 'c' ,'a']
values=[1, 2, 3, 4]

輸出:

{'a': [1,4], 'c': [3], 'b': [2]}

我在依賴解析器中使用它來獲取文本中名詞的對應形容詞。 注意我必須對大量文本執行此操作,因此效率很重要。

請同時說明進近的計算時間。

我只是簡單地遍歷鍵/值對,然后使用setdefault將它們添加到字典中:

>>> keys = ['a', 'b', 'c' ,'a']
>>> values=[1, 2, 3, 4]
>>> d = {}
>>> for k,v in zip(keys, values):
...     d.setdefault(k, []).append(v)
...     
>>> d
{'c': [3], 'b': [2], 'a': [1, 4]}

假設兩個列表的長度相同:

>>> import collections
>>> keys = ['a', 'b', 'c' ,'a']
>>> values = [1, 2, 3, 4]
>>> r = collections.defaultdict(list)

>>> for i, key in enumerate(keys):
...     r[key].append(values[i])

itertools.groupby函數獲取一個列表並將相鄰的相同元素分組在一起。 我們需要對壓縮列表進行排序,以確保相等的鍵最終彼此相鄰。

import itertools
keys = ['a', 'b', 'c', 'a']
values = [1, 2, 3, 4]
data = sorted(zip(keys, values))
dictionary = {}
for k, g in itertools.groupby(data, key=lambda x: x[0]):
    dictionary[k] = [x[1] for x in g]
print(dictionary)
# {'c': [3], 'b': [2], 'a': [1, 4]}

可能有更好的方法可以做到這一點。 但這是一種解決方案:

keys = ['a', 'b', 'c' ,'a']
values=[1, 2, 3, 4]

combined = {}

for k, v in zip(keys, values):
    l = combined.get(k, [])
    l.append(v)
    combined[k] = l

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM