一种更优雅的方法,根据一个值从类中每个dict的相同键中分离出一个dict列表

2024-10-02 14:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个程序中得到一个dict列表,每个dict中都有相同的键,我想根据每个dict中的:值设置一个类属性列表。dict列表可以有多个相同的值

[
    {"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)

我有这样的方法,所以我可以通过对象新值或者目标值等。 这只是一个例子,列表中真正的dict要长得多,而且是由程序创建的。你知道吗

我应该首先使用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)

Tags: keynameself程序列表属性valuedict
1条回答
网友
1楼 · 发布于 2024-10-02 14:27:54
filter(lambda x: x['key'] == 'value', my_data)

输出一个生成器对象,该对象变成如下列表:

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

或者我们可以做一个列表:

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

我正在重读你的问题,以确保我正确地回答了它,但我不确定我是否回答了。如果你在找别的东西,请告诉我。你知道吗

相关问题 更多 >