簡體   English   中英

python:dict值的平面列表

[英]python: flat list of dict values

我有一個像這樣的dicts list

a = [ {'list':[1,2,3]}, {'list':[1,4,5]} ]

我試圖在list鍵中獲得一組平面值,如{1,2,3,4,5} 什么是最快的方式?

你可以編寫一個循環:

result = set()
for row in a:
    result.update(row['list'])

我認為它會合理地運作。

或者您可以簡單地使用集合理解 ,這將導致以下單行

result = {x for row in a for x in row['list']}

如果並非所有元素都包含'list'鍵,則可以將.get(..)與空元組一起使用(這將減少構建時間):

result = {x for row in a for x in row.get('list',())}

目前尚不清楚你對“最快”的定義是什么,但無論是速度還是行數我都會使用itertools和一個生成器的組合。

>>> import itertools
>>> a = [ {'list':[1,2,3]}, {'list':[1,4,5]} ]
>>> b = set(itertools.chain.from_iterable(x['list'] for x in a if 'list' in x))

請注意,我添加了一個警告,防止任何可能不包含'list'鍵的元素; 你可以省略,如果你知道這將永遠是真的。

可以通過reduce平面列表。

您只需要使用初始化程序 - reduce函數中的第三個參數。

reduce(
    lambda  _set, _dict, key='list': _set.update(
          _dict.get(key) or set()) or _set,
    a, 
    set())

上面的代碼適用於python2和python3,但是你需要from functools import reduce導入reduce模塊。 請參閱以下鏈接了解詳情。

暫無
暫無

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

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