1

次のコードがあります(構文エラーが発生します)。期待どおりの結果が得られるバージョンを入手できるように、誰かが修正を手伝ってくれますか?

al = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9}, {'a': 10, 'b': 11, 'c': 12}]
a, b, c = [i.a, i.b, i.c for i in al]

期待される結果:

a = [1, 4, 7, 10]
b = [2, 5, 8, 11]
c = [3, 6, 9, 12]
4

8 に答える 8

4

キーが事前にわかっている場合:

>>> al = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9}, {'a': 10, 'b': 11, 'c': 12}]
>>> a, b, c = [[d[key] for d in al] for key in 'abc'] # ('a', 'b', 'c')
>>> a
[1, 4, 7, 10]
>>> b
[2, 5, 8, 11]
>>> c
[3, 6, 9, 12]

事前にキーがわからない場合:

>>> d = {key: [d[key] for d in al] for key in al[0]}
>>> d
{'a': [1, 4, 7, 10], 'c': [3, 6, 9, 12], 'b': [2, 5, 8, 11]}
>>> a, b, c = map(d.get, 'abc') # OR map(d.get, ('a', 'b', 'c'))
>>> a
[1, 4, 7, 10]
>>> b
[2, 5, 8, 11]
>>> c
[3, 6, 9, 12]
于 2013-09-11T05:28:11.293 に答える
0

これを試して

a,b,c = [map(lambda x:x[ele], al) for ele in 'abc']
于 2013-09-11T05:47:08.330 に答える
0

ワンライナーに興味があり、の辞書でキーの順序と存在を保証する場合は、次のようにしますal

>>> al = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9}, {'a': 10, 'b': 11, 'c': 12}]
>>> dict(zip(al[0].keys(),zip(*[i.values() for i in al])))
{'a': (1, 4, 7, 10), 'c': (3, 6, 9, 12), 'b': (2, 5, 8, 11)}
于 2013-09-11T05:32:52.933 に答える
0

次のようなことができます。

al = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9}, {'a': 10, 'b': 11, 'c': 12}]

result={}
for dic in al:
    for key,val in dic.items():
        result.setdefault(key,[]).append(val)

print result     
# {'a': [1, 4, 7, 10], 'c': [3, 6, 9, 12], 'b': [2, 5, 8, 11]}
a,b,c=result['a'],result['b'],result['c']   

print a,b,c
# [1, 4, 7, 10] [2, 5, 8, 11] [3, 6, 9, 12]

辞書の名前を現在の名前空間の名前にバインドする場合は、次のようにします。

al = [{'a': 1, 'b': 2, 'c': 3, 'd':4}, 
      {'a': 4, 'b': 5, 'c': 6}, 
      {'a': 7, 'b': 8, 'c': 9}]

result={}
for dic in al:
    for k in dic:
        result.setdefault(k,[]).append(dic[k])

print result     
# {'a': [1, 4, 7, 10], 'c': [3, 6, 9, 12], 'b': [2, 5, 8, 11], 'd': [4]}

for k in result:
    code=compile('{}=result["{}"]'.format(k,k), '<string>', 'exec')
    exec code

print a,b,c,d  
# [1, 4, 7, 10] [2, 5, 8, 11] [3, 6, 9, 12] [4]
于 2013-09-11T05:33:37.080 に答える