爲了簡單起見,我在列表中提供了2個列表,但實際上我處理了列表中的數百個列表,每個列表包含大量的字典。我只想在第一個字典中獲取'status'鍵的值,而不檢查該列表中的任何其他字典(因爲我知道它們在該鍵中都包含相同的值)。然後我會在每個大詞典中執行某種聚類。我需要有效地連接所有'標題'值。有沒有辦法讓我的代碼更優雅,更快?更快,更'pythonic'字典列表
我:
nested = [
[
{'id': 287, 'title': 'hungry badger', 'status': 'High'},
{'id': 437, 'title': 'roadtrip to Kansas','status': 'High'}
],
[
{'id': 456, 'title': 'happy title here','status': 'Medium'},
{'id': 342,'title': 'soft big bear','status': 'Medium'}
]
]
我想:
result = [
{
'High': [
{'id': 287, 'title': 'hungry badger'},
{'id': 437, 'title': 'roadtrip to Kansas'}
]
},
{
'Medium': [
{'id': 456, 'title': 'happy title here'},
{'id': 342, 'title': 'soft big bear'}
]
}
]
我試了一下:
for oneList in nested:
result= {}
for i in oneList:
a= list(i.keys())
m= [i[key] for key in a if key not in ['id','title']]
result[m[0]]=oneList
for key in a:
if key not in ['id','title']:
del i[key]
OMG! @。@ 哇。你的解決方案如此之快。非常感謝你!!!!完美的作品。 – el347
一:不要使用sum(nested,[])'。這是平緩的最慢的方法,並且越平緩越慢(它創建'n'臨時'列表',每次越來越多)。你已經在使用'itertools'了,你正在迭代結果(根本不需要一個真正的'list'),所以只需使用'itertools.chain.from_iterable'來平坦化(因爲'lambda'是邪惡的/ slow時不需要,''operator.itemgetter'爲'key'):'groupby(chain.from_iterable(嵌套),itemgetter('status'))'。 ['sum(x,[])'是_slow_(見註釋)](http://stackoverflow.com/a/39520827/364696)。 – ShadowRanger
@ShadowRanger謝謝你!剛剛運行這個:從itertools導入鏈; 進口經營者; s = groupby(chain.from_iterable(results),key = operator.itemgetter('status')); for key,grp in s:print(key,list(grp))一切都很好。 – el347