28

私は次のようなデータ構造を持っています:

異なる年の3つの都市の人口は次のとおりです。

Name  1990 2000 2010
A     10   20   30
B     20   30   10
C     30   10   20

defaultdictデータの保存にを使用しています。

from collections import defaultdict
cityPopulation=defaultdict(list)
cityPopulation['A']=[10,20,30]
cityPopulation['B']=[20,30,10]
cityPopulation['C']=[30,10,20]

defaultdictリストの特定の列(年)に基づいて並べ替えたい。たとえば、1990年の並べ替えでは、がC,B,A表示され、2010年の並べ替えではA,C,B

また、これはデータを保存するための最良の方法ですか?人口の値を変更しているので、変更可能にしたいです。

4

4 に答える 4

40
>>> sorted(cityPopulation.iteritems(),key=lambda (k,v): v[0],reverse=True) #1990
[('C', [30, 10, 20]), ('B', [20, 30, 10]), ('A', [10, 20, 30])]
>>> sorted(cityPopulation.iteritems(),key=lambda (k,v): v[2],reverse=True) #2010
[('A', [10, 20, 30]), ('C', [30, 10, 20]), ('B', [20, 30, 10])]

Python 3 では、ラムダ引数を自動的にアンパックできないため、コードを変更する必要があることに注意してください。

sorted(cityPopulation.items(), key=lambda k_v: k_v[1][2], reverse=True) #2010
于 2012-04-17T16:13:04.857 に答える
11

Adefaultdictは注文を保持していません。を使用するOrderedDictか、リストとして毎回キーを並べ替える必要がある場合があります。

例えば:

  from operator import itemgetter
  sorted_city_pop = OrderedDict(sorted(cityPopulation.items()))

編集:注文を印刷するだけの場合は、sorted組み込みの機能を使用します。

for key, value in sorted(cityPopulation.items()):
    print(key, value)
于 2012-04-17T16:00:47.837 に答える