1

キーとアイテムのある辞書があります。基本的に、キーは人の名前を保持し、値は給与を保持します。私が欲しいのは、より高い値で頻度に従ってアイテムを注文することです。

d = {'name-1': 100, 'name-2':90, 'name-3': 80, 'name-1': 80}
    print OrderedDict(sorted(d.items(), key=lambda t: t[1]))

したがって、出力はになります('name-1':100)。なぜなら、ディクテーションでの発生は2つであり、給与が最も高いからです。

私はこのdictをソートすることしかできません。その結果を得るために私を助けてくれませんか?

4

3 に答える 3

4

1 つのアプローチは、dict を使用することですが、キーごとに値をリストに格納します。

>>> d = {'name-1': [100, 80], 'name-2':[90], 'name-3': [80]}

その後

>>> sorted(d, key=lambda x:max(d.get(x)), reverse=True)
['name-1', 'name-2', 'name-3']
于 2012-09-26T03:53:33.523 に答える
3

他の人が指摘しているように、辞書に重複キーを含めることはできません...ただし、リストを簡単に使用できます

#d = (('name-1', 100), ('name-2',90), ('name-3',80), ('name-1',80))
names = "name1,name2,name3,name1".split(",")
salaries = map(int,"100,90,80,80".split(","))
d = zip(names,salaries)
print max(d,key=lambda x:names.count(x[0])*1000+x[1])

#('name-1', 100)
print sorted(d,key=lambda x:names.count(x[0])*1000+x[1],reverse=True)
[('name-1', 100), ('name-1', 80), ('name-2', 90), ('name-3', 80)]
于 2012-09-26T03:53:10.687 に答える
0

dそのdictを作成しようとしましたか?

>>> d = {'name-1': 100, 'name-2':90, 'name-3': 80, 'name-1': 80}
>>> d
{'name-1': 80, 'name-2': 90, 'name-3': 80} # notice 'name-1' is only in there once.
>>> 

dict で同じ名前の 2 つ目のキーを作成しようとすると、そのキーに関連付けられていた値が上書きされます。すべてのキーは辞書内で一意です...それらが一意でなければ、辞書はもはや役に立ちません。

この種のデータ構造が必要な場合は、ネストされたタプル/リストを作成できます...ただし、キーを見つけるにはリスト内のすべてのオブジェクトを反復処理する必要があるため、はるかに遅くなります。

d = (
        ('name-1', 100),
        ('name-2', 90),
        ('name-3', 80),
        ('name-1', 80),
     )
于 2012-09-26T03:47:37.287 に答える