[英]How to make dict element value as list in Python
我有一份清單。 讓我們說[3,4,2,3,4,2,1,4,5]
。
我需要從元素的索引創建一個字典。
在這種情況下,我需要創建一個dict,如下所示:
{
'3':[0,3],
'4':[1,4,7],
'2':[2,5],
'1':[6],
'5':[8]
}
其中元素值是提供的列表中鍵的索引。
我試過了。 但是只能將值更改為整數。 但無法將它們列為清單。
有沒有辦法只用1 for循環?
我試過的代碼:
d=dict()
ll=[1,2,1,2,1,2,3,4,5,5,4,2,4,6,5,6,78,3,2,4,5,7,8,9,4,4,2,2,34,5,6,3]
for i,j in enumerate(ll):
d[j].append(i)
print(d)
您可以將collections.defaultdict
與enumerate
用於O(n)解決方案:
from collections import defaultdict
d = defaultdict(list)
A = [3,4,2,3,4,2,1,4,5]
for idx, val in enumerate(A):
d[val].append(idx)
print(d)
defaultdict(list, {1: [6], 2: [2, 5], 3: [0, 3], 4: [1, 4, 7], 5: [8]})
mylist = [3, 4, 2, 3, 4, 2, 1, 4, 5]
d = {}
for index, item in enumerate(mylist):
d.setdefault(item, []).append(index)
結果是
{3: [0, 3], 4: [1, 4, 7], 2: [2, 5], 1: [6], 5: [8]}
為什么? 好吧,我們遍歷列表,對於每個項目,我們首先確保該項目映射到的字典中有一個列表。 然后我們將相應的索引附加到該列表。 結果是一個字典,它將每個看到的項目映射到它所找到的索引列表。
該解決方案類似於jpp的解決方案,除了.setdefault()
部分,它在每個循環運行中創建一個空列表,而defaultdict
方法只在需要時創建新列表。
另一種方法可能是實現__missing__
的dict
子類。 只要沒有密鑰,就會調用此方法。
class ListDict(dict):
def __missing__(self, key):
l = []
self[key] = l
return l
然后只做d[item].append(index)
。 現在,無論何時找不到密鑰,都會調用__missing__()
來“修復”問題。 另請參閱如何從dict調用__missing__ 。
這將是有效的,你正在尋找的關鍵是enumerate()函數:
list_to_convert = [3,4,2,3,4,2,1,4,5]
out_dict = {}
for idx, val in enumerate(list_to_convert):
if val in out_dict:
out_dict[val].append(idx)
else:
out_dict[val] = [idx,]
print (out_dict)
得到:
{3: [0, 3], 4: [1, 4, 7], 2: [2, 5], 1: [6], 5: [8]}
你可以使用set
:
d = [3,4,2,3,4,2,1,4,5]
new_d = {i:[c for c, a in enumerate(d) if i == a] for i in set(d)}
輸出:
{1: [6], 2: [2, 5], 3: [0, 3], 4: [1, 4, 7], 5: [8]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.