2016-04-12 14 views
1
Illinois: ['13', '12', '18', '23', '26', '25', '24', '19', '13', '10', '15', '14', '14', '4', '3'] 
Indiana: ['7', '6', '7', '8', '11', '11', '13', '12', '7', '7', '7', '7', '9', '2', '2'] 

これらは私の辞書にdとしてあります。 辞書の各キーで最大値と最小値を取得し、その値がどこにあるインデックスを取得するのですか。例えば辞書の最大値と最小値を取得する

:イリノイ州 、26は、インデックス5であり、3はインディアナ州の指標15 の最小値である最大値である13は、インデックス7であり、2が最も小さい値である最大値であります指標14

出力は次のとおりです。

Illinois: 26 in index 5 and 3 in index 15 
Indiana: 13 in index 7 and 2 in index 14 

私はこれをどのように行うのでしょうか?

d = {} 
for row in csv_f: 
    d[row[0]]=row[1:] 
+1

彼自身のコードの試行を表示してください。現在どのような困難があるのか​​を説明してください。最終的に、[mcve] – idjaw

+0

@ idjawが追加されました。これはどのようにコード化するのかわかりません......... – JWhatDoe

+0

これは文字通りmax(max)リストとlist.index(max [リスト]))を選択します。 – Adib

答えて

1

あなたの文字列は、このようなものですとして印刷maxと分を取得することができます(あなたが最初のオカレンスだけをしたいと仮定した場合)

MY_D = {'Illinois': ['13', '12', '18', '23', '26', '25', '24', '19', '13', '10', '15', '14', '14', '4', '3'], 
'Indiana': ['7', '6', '7', '8', '11', '11', '13', '12', '7', '7', '7', '7', '9', '2', '2']} 

for k,v in MY_D.items(): 
    #This assumes that everything in v is an int, or rather can be converted to one. 
    my_l = [int(n) for n in v] 
    #if not 
    #my_l = [int(n) for n in v if n.isdigit()] 
    _max, _min = max(my_l), min(my_l) 
    print("%s: Min - %d in index %d, Max - %d in index %d" % (k, _min, my_l.index(_min), _max, my_l.index(_max))) 
+0

私は質問があります。イリノイ州の最初のインデックスを空の文字列に置き換えたとしましょう。どうすれば回避できますか? – JWhatDoe

+1

例外を処理するケースを記述します。 '[nの場合はnの場合はint [n(n)ならn]'、さらにはn.isdigit()の場合は[nの場合はnのint(n)] – Pythonista

+1

ありがと!非常に役立ちます! – JWhatDoe

0

一緒にスロービット、これらに思えます仕事をしなさい。

d = {"Illinois": ['13', '12', '18', '23', '26', '25', '24', '19', '13', '10', '15', '14', '14', '4', '3'], 
"Indiana": ['7', '6', '7', '8', '11', '11', '13', '12', '7', '7', '7', '7', '9', '2', '2']} 

if __name__ == "__main__": 
    print d 

    for state in d: 
     # returns the numbers with their index (#, index) 
     pairs = [(int(d[state][x]), x) for x in xrange(len(d[state]))] 
     minpair = min(pairs) 
     maxpair = max(pairs) 
     print "%s: %d in index %d and %d in index %d"%(state,maxpair[0],maxpair[1], 
     minpair[0],minpair[1]) 

出力:

{'Indiana': ['7', '6', '7', '8', '11', '11', '13', '12', '7', '7', '7', '7', '9', '2', '2'], 'Illinois': ['13', '12', '18', '23', '26', '25', '24', '19', '13', '10', '15', '14', '14', '4', '3']} 
Indiana: 13 in index 6 and 2 in index 13 
Illinois: 26 in index 4 and 3 in index 14 

空白文字列を回避するために、あなたはここで

pairs = [] 
    for x in xrange(len(d[state])): 
     try: 
      pairs.append((int(d[state][x]), x)) 
     except ValueError: 
      pass # not a valid number 
+0

私は質問があります。イリノイ州の最初のインデックスを空の文字列に置き換えたとしましょう。どうすれば回避できますか? – JWhatDoe

+0

ここに書式設定していないので、コメントに答えるための主な回答が修正されました。 – Jamtot

0

にリストの内包を破ることができ辞書{country: (maxval, index), (minval, index))}を返すのソリューションです:

d = { 
    'Illinois': ['13', '12', '18', '23', '26', '25', '24', '19', '13', '10', '15', '14', '14', '4', '3'], 
    'Indiana': ['7', '6', '7', '8', '11', '11', '13', '12', '7', '7', '7', '7', '9', '2', '2'] 
} 


maxmin = {} 
for state, numbers in d.items(): 
    maxmin[state] = (
     max(enumerate(numbers), key=lambda x: int(x[1])), 
     min(enumerate(numbers), key=lambda x: int(x[1])) 
    ) 


print(maxmin) 
+0

'country!= state'をマイナー編集します。また、これは動作しません。 – Pythonista

+0

ありがとうございます。私は 'O(n)'の複雑さとインデックスへのより読みやすいアクセスを得るためにコードを更新しました。なぜ動作しませんか? – aluriak

+1

'int'変換を忘れました。今修正されました。 – aluriak