0

私はPythonを初めて使用し、作業する大規模なデータセットを設定しています。これを可能な限り最適化された方法で実行していることを確認したかったのですが、今はそうではないと確信しています。私は現在そのように設定されているpython辞書を持っています。

list1 = [1,2],[3,4],[4,5]
list2 = [10,20],[30,40],[50,60]
list3 = [100,200],[300,400],[400,500]

これらのリストはプログラムで作成され (実際にはもっと大きい)、次のように辞書に並べ替えられます。

l_dict = {"l1":list1,"l2":list2,"l3":list3} 
print l_dict  
    `{'l2': ([10, 20], [30, 40], [50, 60]), 'l3': ([100, 200], [300, 400], [400, 500]), 'l1': ([1, 2], [3, 4], [4, 5])}`

別の辞書をまったく同じように設定していますが、番号とオブジェクト名が異なります (k_dict と呼びます)。ここに私の質問があります: 各タプルの最初のオブジェクトの配列/リストを取得する最も簡単な方法は何ですか? 私のコードは次のとおりです。

#Gets first tuple value from each list 
listnames = ["l1","l2","l3"]
i=10
while(i < len(listdict)):
 for x,a in l_dict[listnames[i]]:
  return a[0]
 i+=1

働いていた

(1,3,4,10,30,50,100,300,400)改行で区切られた以外のようなものを返す必要があります

私も辞書の理解を試みました

print {x[0] for x in ldict[listnames]}

これは私にとってはうまくいきませんでした。また、うまくいかない多くの同様のバリエーションを試しました。

また、この辞書はこのデータを設定する良い方法ですか? 辞書内のタプルのリストの他の例を見つけることができませんでした。これにより、このような使いやすいデータフレーム/その他のデータ格納方法があると思われます。私はpython 2.7.1を使用しています

4

3 に答える 3

1

このリスト内包表記を使用します。

In [16]: [y[0]  for x in listnames for y in l_dict[x]]
Out[16]: [1, 3, 4, 10, 30, 50, 100, 300, 400]

上記のリスト内包表記は、次と同等です。

In [26]: lis=[]

In [27]: for x in listnames:
   ....:     for y in l_dict[x]:
   ....:         lis.append(y[0])
   ....:         

In [28]: lis
Out[28]: [1, 3, 4, 10, 30, 50, 100, 300, 400]
于 2013-04-08T23:07:03.303 に答える
0

よくある を​​探しているようですねzip。これを見て:

list1 = [1,2],[3,4],[4,5]
print zip(*list1)
# [(1, 3, 4), (2, 4, 5)]

本当に最初のペアだけを使用したい場合

from itertools import izip
generator = izip(*list1)
first = next(generator)
于 2013-04-08T23:09:32.790 に答える