簡體   English   中英

一種更優雅的方法,根據值與類中每個字典中相同鍵的值分離字典列表

[英]More elegant way to separate a list of dict(s) based on a value from an identical key in each dict in a class

我從程序中獲得了一個字典列表的返回,每個字典在每個字典中具有相同的鍵,我想基於每個字典中的:value設置一個類屬性列表。 字典列表可以具有多個相同的值

[
    {"key":"value"}, 
    {"key":"differentvalue"}, 
    {"key":"value"}, 
    {"key":"newValue"}, 
    {"key":"newValue"}
]

現在我有一個像這樣的課程

class DynamicAttributesFromDict:
    def __init__(self, listed):
        for i in range(len(listed)):
            name = listed[i]["key"]
            p = getattr(self, name, [])
            p.append(listed[i])
            setattr(self, name, p)

我有這種方式,這樣我就可以通過obj.newValue或obj.value等訪問某些字典列表。這只是一個示例,列表中的實際字典要更長,並且是由程序創建的。

我應該首先使用hasattr來檢查屬性和要附加的getattr嗎?

以上工作,但似乎粗略

python類的一種新東西,因此任何幫助將不勝感激

編輯:

我認為更好的表述

from pprint import pprint
listdict = [
    {"key":"value", "difkey":"something"}, 
    {"key":"differentvalue", "xkey":"yvalue"}, 
    {"key":"value"}, 
    {"key":"newValue"}, 
    {"key":"newValue"}
]

class DynamicAttributesFromDict:
    def __init__(self, listed):
        for i in range(len(listed)):
            name = listed[i]["key"]
            p = getattr(self, name, [])
            p.append(listed[i])
            setattr(self, name, p)

f = DynamicAttributesFromDict(listdict)
pp(f.value)
pp(f.differentvalue)
pp(f.newValue)
filter(lambda x: x['key'] == 'value', my_data)

輸出一個生成器對象,該對象變成如下列表:

[{'key': 'value'}, {'key': 'value'}]

或者我們可以進行列表理解:

[d for d in my_data if d['key'] == 'value']

我正在重新閱讀您的問題,以確保我已正確回答,但不確定是否已回答。 讓我知道您是否正在尋找其他東西。

暫無
暫無

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

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