回答編集履歴

2 追記

hayataka2049

hayataka2049 score 19454

2018/06/29 22:12  投稿

回答の前にひとつアドバイスしますと、
```python
   player_ans = {}
   for h, p in zip(date, uryo): #取り出した入力データをリストに格納
       player_ans[h] = p
```
これをforの中に入れるのはやめましょうか(無駄だから)。
---
どうせ辞書に入れるなら、もうすこし旨味のある入れ方をした方が良いでしょう。
```python
# めんどいので入力周り省略
num = [7, 3]
date = [1,2,3,4,5,6,7]
uryo = [0,20,10,80,10,0,10]
dn, span = num # 扱いづらいのでunpack
player_ans = {}
for i in range(dn - span + 1): # このforループの意味は頭をひねって考えること
   player_ans[date[i]] = uryo[i:i+span]
# 以下3つは確認用のprint
print(player_ans) # => {1: [0, 20, 10], 2: [20, 10, 80], 3: [10, 80, 10], 4: [80, 10, 0], 5: [10, 0, 10]}
print(player_ans.items()) # => dict_items([(1, [0, 20, 10]), (2, [20, 10, 80]), (3, [10, 80, 10]), (4, [80, 10, 0]), (5, [10, 0, 10])])
print(min(player_ans.items(), key=lambda x:sum(x[1]))) # => (5, [10, 0, 10])
# 最終的にほしいもの
print(min(player_ans.items(), key=lambda x:sum(x[1]))[0]) # => 5
# こっちでもいいかなぁ
print(min(player_ans, key=lambda x:sum(player_ans[x]))) # => 5
```
```
あるいは、
```python
for i in range(dn - span + 1): # このforループの意味は頭をひねって考えること
   player_ans[date[i]] = sum(uryo[i:i+span])
```
で後ろのminのkeyが単純になります。後からリストを使わないのならこの方が良いかも。
1 追記

hayataka2049

hayataka2049 score 19454

2018/06/29 20:42  投稿

回答の前にひとつアドバイスしますと、
```python
   player_ans = {}
   for h, p in zip(date, uryo): #取り出した入力データをリストに格納
       player_ans[h] = p
```
これをforの中に入れるのはやめましょうか(無駄だから)。
---
どうせ辞書に入れるなら、もうすこし旨味のある入れ方をした方が良いでしょう。
```python
# めんどいので入力周り省略
num = [7, 3]
date = [1,2,3,4,5,6,7]
uryo = [0,20,10,80,10,0,10]
dn, span = num # 扱いづらいのでunpack
player_ans = {}
for i in range(dn - span + 1): # このforループの意味は頭をひねって考えること
   player_ans[date[i]] = uryo[i:i+span]
# 以下3つは確認用のprint
print(player_ans) # => {1: [0, 20, 10], 2: [20, 10, 80], 3: [10, 80, 10], 4: [80, 10, 0], 5: [10, 0, 10]}
print(player_ans.items()) # => dict_items([(1, [0, 20, 10]), (2, [20, 10, 80]), (3, [10, 80, 10]), (4, [80, 10, 0]), (5, [10, 0, 10])])
print(min(player_ans.items(), key=lambda x:sum(x[1]))) # => (5, [10, 0, 10])
# 最終的にほしいもの
print(min(player_ans.items(), key=lambda x:sum(x[1]))[0]) # => 5
# こっちでもいいかなぁ  
print(min(player_ans, key=lambda x:sum(player_ans[x]))) # => 5  
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る