我有一個數據結構,看起來像這樣:什麼是最Python的方式來翻譯(D1,D2)[]爲{D3:D2 []}其中g(D1)產生D3 []
data = [
(16, 'a'),
(12, 'b'),
(21, 'c'),
(30, 'b'),
(17, 'd'),
...
]
這些數字很大(超過32位),非順序的,非唯一的,而不是按順序。字符串可能會重複。
我有一臺發電機:
def factors(n):
for d in range(2, 5):
if n % d == 0:
yield n
它可以產生零個或多個值。每個輸入的結果不是唯一的。我需要的是:
result = {
2: ['a', 'b', 'b'], # 16, 12, 30
3: ['b', 'c', 'b'], # 12, 21, 30
4: ['a', 'b'] # 16, 12
]
我想盡可能接近標準Python模塊(沒有numpy)。我已經得到了最好是這樣的:
result = {}
for a, b in data:
for c in factors(a):
result.setdefault(c).append(b)
但這種感覺怪怪的,而且我更優雅的使用Python的處理這樣的事情。
爲什麼因素停止' 4'? –
......不,這似乎很像你怎麼做! (假設你的實際代碼是'setdefault(c,[])',你可以使用'defaultdict(list)'而不是'setdefault'。) – Ryan
@MosesKoledoye 4個因素對任何人都應該足夠了(哈哈) 。其實這是爲了證明這份清單可以重複。如果列表中有12和24,則兩者都會生成[2,3,4]。這是草稿中的一個例子,猜測它已經被刪除。 – Hounshell