2016-12-13 20 views
-1

私はさまざまな方法で注文できるタプルのリストを持っています。例えば、それは次のようになります。Python:特定の順序でタプルのリストをソート

data = [ ("name", "Derek Carr"), 
     ("college", "Fresno State"), 
     ("jersey", 4), 
     ("team", "Oakland Raiders") ] 

またはこのよう:

data = [ ("college", "Fresno State"), 
     ("jersey", 4), 
     ("name", "Derek Carr"), 
     ("team", "Oakland Raiders") ] 

内容は毎回同じですが、タプルの順序が異なっています。

condensed_data = ["Derek Carr", "Oakland_Raiders"] 

EDIT:(1)データリストが修正されました。 (2)さまざまな順序のリストが辞書から構築されている理由

+4

無効なpython構文... – mgilson

+0

また、実際にはタプルのリストを持っていると仮定すると、この問題は非常に単純です。この問題の特定の部分が問題を抱えていますか?試したことを見せることができますか?ここで問題を起こしていることを理解して理解できるように説明してください。 – mgilson

答えて

1

[v for key in ["name", "team"] for k, v in data if k == key] 
# ['Derek Carr', 'Oakland Raiders'] 

それとも、通常のループを使用することができます

lst = [] 
for key in ['name', 'team']: 
    for k, v in data: 
     if k == key: 
      lst.append(v) 

lst 
# ['Derek Carr', 'Oakland Raiders'] 
+0

これはまさにを探しています。リスト内包表記(例えば、ネストされた反復)を使用することが許可されていない場合、私はどのようにこれを書いていますか? –

+0

それは奇妙な制約のように聞こえますが、確かにダブルループを書くことも、データから辞書を構築してキーで値を取得することもできます。 – Psidom

+0

これは制約ではありません。私はちょうどそれがどのように行われるのだろうが興味がありますが、私はそれを理解するのに困っています。しかし、編集のおかげで!わかった。 –

0

ここでは、Pythonで並べ替える方法の良い入門書があります:https://wiki.python.org/moin/HowTo/Sorting

condensed_dataあなたは持っていますが、すべてのエントリがありますか? "name""team"、それならばとあなたのタプル(または辞書)の最初の部分を比較

condensed_data = sorted([item[1] for item in data if item[1] in ('Derek Carr', 'Oakland Raiders')]) 
0

:あなたが唯一の凝縮データを取得するために探している場合は、次のようなリスト内包を、しようとする場合があります2番目の部分をcondensed_dataに挿入します。ここで何かを並べ替える必要はありません。例えば

あなたはタプルのリストを持っていると仮定すると
res = [None, None] 

for tup in data: 
    if tup[0] == 'name': 
     res[0] = tup[1] 
    elif tup[0] == 'team': 
     res[1] = tup[1] 

>>> print(res) 
['Derek Carr', 'Oakland Raiders'] 
2

を私は仮定していますあなたのデータは次のようになります:

012ある
people = [ 
      [("name", "Derek Carr"), 
      ("college", "Fresno State"), 
      ("jersey", 4), 
      ("team", "Oakland Raiders")], 
      [("college", "Fresno State"), 
      ("jersey", 4), 
      ("name", "Derek Carr"), 
      ("team", "Oakland Raiders")] 
     ] 

、あなたは有効なタプルを(あなたの例では、有効なPythonはありませんでした)が含まれ、それぞれが、リストのリストを持っています。

まず、我々は値にマッピングする辞書のキーにタプルの各リストを変換するつもりだ:

for p in data: 
    p_data = [p["name"], p["team"]] 

data = map(dict, people) 

を今、私たちは、あなたが一人あたりたい情報だけを抽出することができます


あなたは一人だけのためにこれをしたい場合:あなたのデータがある

data = [("name", "Derek Carr"), 
     ("college", "Fresno State"), 
     ("jersey", 4), 
     ("team", "Oakland Raiders")] 
person_data = dict(data) 
result = [person_data["name"], person_data["team"]] 
関連する問題