簡體   English   中英

defaultdict(list)將所有值連接到一個列表中

[英]defaultdict(list) concatenating all the values into one list

我正在嘗試做的是:

編寫一種方法來對字符串數組進行排序,以使所有anagrms彼此相鄰。

我有以下代碼:

from collections import defaultdict
res = defaultdict(list)
L = ['foo', 'poo', 'k', 'fo', 'ofo', 'oof']

for w in L:
    res["".join(sorted(w))].append(w)

但是現在我想將res所有值都合並到一個列表中。

我嘗試了這個:

output =[]
for items in res.values():
    output.append(i for i in items)

但這給了我:

>>> output
[<generator object <genexpr> at 0x102a4d1e0>, <generator object <genexpr> at 0x102a95870>, <generator object <genexpr> at 0x102a958c0>, <generator object <genexpr> at 0x102a95910>]

如何正確顯示一個列表中的項目?

期望:

['foo','ofo', 'oof','poo', 'k', 'fo',]

(所有字謎都在一起,順序不重要,只要它們在列表中相鄰即可。)

當你做-

output.append(i for i in items)

實際上,您正在將生成器表達式( i for i in items附加到output列表中,您也可以從output列表的repr結果中看到。 這不會自動求值生成器表達式並添加結果。 您應該做的是使用output.extend() 范例-

>>> output = []
>>> for items in res.values():
...     output.extend(items)
...
>>> output
['fo', 'k', 'foo', 'ofo', 'oof', 'poo']

這將對表達式求值,並將可迭代(生成器表達式)中的每個元素作為單獨的元素附加到列表中。


但是,如果要從res詞典的所有列表值轉換單個列表, itertools.chain.from_iterable簡單的方法是使用itertools.chain.from_iterable 范例-

>>> from itertools import chain
>>> output = list(chain.from_iterable(res.values()))
>>> output
['fo', 'k', 'foo', 'ofo', 'oof', 'poo']

EDITED

我相信取代

output.append(i for i in items)

output.extend(items)

會做您期望的。

暫無
暫無

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

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