2016-04-07 9 views
0
dict_d = {'Blue': [('Camaro', 10, 12)], 'Red': [('Camara', 10, 5)], 'Green': [('Nancy', 10, 8), ('Steve', 7, 8), ('Rich', 10, 4)]} 

私は上記の辞書を持っていますが、この場合は複数の値で並べ替えるだけです。名前で並べ替えたい基本的には、私が得たいものは:タプル内の名前で辞書内のタプルを並べ替える方法

{'Blue': [('Camaro', 10, 12)], 'Red': [('Camara', 10, 5)], 'Green': [('Nancy', 10, 8), ('Rich', 10, 4), ('Steve', 7, 8)]} 

緑のタプルが名前でソートされている点が異なります。ここで

は、私が試したものです:

sorted((dict_d).items(), key = (lambda x: list(x)[1][0])) 

は、それは私にエラーを与えていないと、それは ので混乱し.....ソートしませんでした...あなたがしようとしていない

+0

ようこそスタックオーバーフロー!あなたは誰かにあなたのためのコードを書くよう求めているようです。 Stack Overflowは、コード作成サービスではなく、Q&Aサイトです。効果的な質問を書く方法については、こちらをご覧ください(http://stackoverflow.com/help/how-to-ask)。 – zondo

+0

辞書は_unordered_です。それらはソートできません。ソートされた文字列表現しか取得できません。代わりにOrderedDictを使用してください! –

+1

@AkshatMahajan - 'sorted()'は文字列ではなく 'list'を生成します。また、OPのコードは辞書をソートするかもしれませんが、実際にやりたいのは辞書に含まれる値をソートすることです。 – TigerhawkT3

答えて

1

辞書を並べ替えるが、辞書の値をソートすると、辞書の理解度を使ってソートされた値で辞書を再構築することができます。

名前でソートしようとしているので、ソートキーとして[0]という名前を付けてください。

>>> {k: sorted(v, key=lambda x: x[0]) for k, v in dict_d.items()} 
{'Blue': [('Camaro', 10, 12)], 
'Green': [('Nancy', 10, 8), ('Rich', 10, 4), ('Steve', 7, 8)], 
'Red': [('Camara', 10, 5)]} 

NB:あなたは値に基づいて順番を気にしないならば、あなたは、キーを無視することができますし、単にソートタプル - あなたはそれを注意深く読めばsorted(v)

+0

これは、OPが試したものと一直線になっています(編集が見えませんでした)+1 – aneroid

+0

です。ありがとうございました!私は本当に理解を学ぶ必要があります。これは本当に役立ちます! –

1

あなたの質問は、答えを持っています:辞書

  • のアイテムを

    1. ループ(この場合は、リスト)の値は、長さ> 1
        を持っている場合の
      • ソート値

    注:あなたがリストをソートすると、ソートのPythonの自然方法は、各項目の上に行くことです。 Pythonは、タプルの各項目をソートして並べ替えて(リスト内の)タプルをソートします。したがって、各タプルの最初の項目を比較し、次に2番目の項目と3番目の項目を比較します。したがって、これらのタプルの '名前'は、特別な比較関数を必要とせずに自動比較されます。

    >>> d = {'Blue': [('Camaro', 10, 12)], 'Red': [('Camara', 10, 5)], 'Green': [('Nancy', 10, 8), ('Steve', 7, 8), ('Rich', 10, 4)]} 
    >>> for k, v in d.items(): 
    ...  if len(v) > 1: 
    ...   d[k] = sorted(v) 
    ... 
    >>> d 
    {'Blue': [('Camaro', 10, 12)], 'Green': [('Nancy', 10, 8), ('Rich', 10, 4), ('Steve', 7, 8)], 'Red': [('Camara', 10, 5)]} 
    

    そして、あなたのリストには、一つだけのタプルを持っている場合if len(v) > 1のステップは、実際に行われている必要はありません。リストには1つの項目しかないので、Pythonはソートすることはありません。

    試した内容に基づいて編集してください:sorted((dict_d).items(), key = (lambda x: list(x)[1][0])):ソートされた値で構成された新しい辞書を作成します(下のAChampion's answer)。

  • 関連する問題