更优雅的方法来根据类中每个字典中相同键的值来分隔字典列表

时间:2017-07-25 22:06:55

标签: python python-3.x class dynamic attributes

我从程序中返回一个dict(s)列表,每个dict中都有相同的键,我想根据每个中的: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等访问某些dicts列表。 这只是一个例子,列表中的实际词组更长,并且是从程序中创建的。

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

1 个答案:

答案 0 :(得分:0)

filter(lambda x: x['key'] == 'value', my_data)

输出一个生成器对象,该对象变成这样的列表:

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

或者我们可以进行列表理解:

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

我正在重读你的问题以确保我正确回答,而且我不确定我做了什么。如果你正在寻找别的东西,请告诉我。