簡體   English   中英

按字典列表中的鍵對值進行分組

[英]Group values by keys in list of dictionaries

我擁有的:

d = {datetime.date(2013, 1, 1): {'15169': 2, '56203': 5, '2519': 3, '18144': 3, '9737': 4},
datetime.date(2014, 1, 1): {'15169': 5, '56203': 3, '2519': 2, '18144': 1, '9737': 0}}

我想要的是:

{15169:[2,5], 56203:[5,3], 2519:[3,2], 18144:[3,1], 9737:[4,0]}

有沒有直接的方法來實現這一目標? 嘗試了多種方法,但看起來沒有任何直接的方法。

ans = {}
[[ans.setdefault(k, []).append(v) for k, v in x.items()] for x in d.values()]
ans
# {'15169': [2, 5],
#  '56203': [5, 3],
#  '2519': [3, 2],
#  '18144': [3, 1],
#  '9737': [4, 0]}

或使用 pandas

pd.DataFrame(d).apply(list, axis=1).to_dict()
# {'15169': [2, 5],
#  '56203': [5, 3],
#  '2519': [3, 2],
#  '18144': [3, 1],
#  '9737': [4, 0]}

就像我想象的那樣簡單,使用defaultdict

from collections import defaultdict

out = defaultdict(list)

for x in d.values():
    for k,v in x.items():
        out[k].append(v)

Output:

defaultdict(list,
            {'15169': [2, 5],
             '56203': [5, 3],
             '2519': [3, 2],
             '18144': [3, 1],
             '9737': [4, 0]})

我可能錯了,但我不知道有什么方法可以達到你想要的效果。 即便如此,實現這一特定結果應該一點也不難。 我認為最好的方法是實現自己的group-by()方法! 嘗試推理將原始Dictionary中的數據分組到所需的 object 中所需的步驟。 看起來您正在按 p->d 進行分組,其中 p 是字典鍵,而 d 是該屬性的鍵作為回報。 那正是p->d的分組,我不知道這個答案是否足夠清楚,我不想提供代碼,這樣你就不會錯過你的學習經歷:但如果你需要它就問和我會盡力為你提供一個例子:)

暫無
暫無

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

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