-2

2要素リストのリストのリストがあります。例:

[[[a, b], [c, d], [e, f]], [[g, h], [i, j], [k, l]]] 

そして、次のように、2 つの要素のリストから属性を持つオブジェクトのリストを作成したいと考えています。

[(obj.a = b, obj.c=d, obj.e=f), (obj.g=h, obj.i=j, obj.k=l)]

私は多くの方法を試しましたが、どのようにオブジェクトを作成し、属性a = object()を介して設定してobject.__setattr__もうまくいかなかったようです。

4

2 に答える 2

2

objectインスタンスに任意の属性を設定することはできません:

>>> a = object()
>>> a.b = 'c'

Traceback (most recent call last):
  File "<pyshell#56>", line 1, in <module>
    a.b = 'c'
AttributeError: 'object' object has no attribute 'b'

Genericただし、次のことを可能にするクラスを作成できます。

class Generic(object):
    pass

次に、リストに文字列のペアが含まれていると仮定します

l = [[['a', 'b'], ['c', 'd'], ['e', 'f']], 
     [['g', 'h'], ['i', 'j'], ['k', 'l']]]

次のように反復できます。

out = []
for ll in l:
    obj = Generic()
    for attr, val in ll:
        setattr(obj, attr, val)
    out.append(obj)

または、 の 3 つの引数形式をtype使用して任意のクラスを作成し、それらのインスタンスを作成することもできます。

out = [type("Generic", (object,), dict(ll))() for ll in l]

たとえば、

>>> dict(l[0])
{'a': 'b', 'c': 'd', 'e': 'f'}

a最後に、例えば,をceの引数として取る実際の (ジェネリックではない) オブジェクトがある場合__init__:

class Actual(object):
    def __init__(self, a, c, e):
        self.a = a
        self.c = c
        self.e = e

辞書のアンパックを使用して、サブリストからインスタンスを作成できます。例l[0]:

obj = Actual(**dict(l[0]))
于 2014-10-13T14:03:44.843 に答える
0

疑わしい場合は、辞書を使用してください。

>>> A=[[["a", "b"], ["c", "d"], ["e", "f"]], [["g", "h"], ["i", "j"], ["k", "l"]]] 
>>> [x for x in A]
[[['a', 'b'], ['c', 'd'], ['e', 'f']], [['g', 'h'], ['i', 'j'], ['k', 'l']]]
>>> B = [dict(x) for x in A]
>>> repr(B)
[{'a': 'b', 'c': 'd', 'e': 'f'}, {'i': 'j', 'k': 'l', 'g': 'h'}]
于 2014-10-13T14:22:50.533 に答える