2017-04-12 14 views
1

キーにタイムスタンプが含まれている辞書があります。基本的には、そのタイムスタンプで辞書を並べ替える必要があります。 "最初の"タイムスタンプに対応する辞書値を取得できます。キーアンパックエラーで辞書をソート

私が試した:

from __future__ import print_function 

from collections import OrderedDict 
from datetime import datetime 

def _fetch_ts(name): 
    return datetime.strptime(name[-13:], '%Y%m%d_%H%M') 

incoming_dict = {'20170410_1133': 'A', '20170412_1133': 'B'} 
print("starting with: {}".format(incoming_dict)) 
sorted_dict = OrderedDict(sorted(incoming_dict, key=_fetch_ts)) 
print("gives  : {}".format(incoming_dict)) 
print("should be A or B: {}".format(sorted_dict.values()[0])) 
をしかし、それは

starting with: {'20170410_1133': 'A', '20170412_1133': 'B'} 
Traceback (most recent call last): 
    File "test.py", line 13, in <module> 
    sorted_dict = OrderedDict(sorted(incoming_dict, key=_fetch_ts)) 
    File "/usr/lib/python2.7/collections.py", line 69, in __init__ 
    self.__update(*args, **kwds) 
    File "/usr/lib/python2.7/_abcoll.py", line 571, in update 
    for key, value in other: 
ValueError: too many values to unpack 

だから私はここで間違って何をやっているを出力しますか?

+2

代わりに、キーと値のペアのあなたの並べ替え辞書のキー、。 'sorted(incoming_dict.items()、...)'を使用してください。 – vaultah

答えて

1

incoming_dictから値のペアをアンパックするには、incoming_dict.items()を使用する必要があります。前述のように

OrderedDict(sorted(incoming_dict.items(), key=_fetch_ts)) 

、あなたはしかし、あなただけで簡単にname[0][-13:]を参照することができ、同様_fetch_tsを変更する必要があります。

+0

'_fetch_ts'も変更する必要があります。 – vaultah

+0

よかった、ありがとう。 – GhostCat

1

事前に並べ替えてタプルのリストとして再構築することで、OrderedDictを再構築できます。

のような:

from __future__ import print_function 

from collections import OrderedDict 
from datetime import datetime 

def _fetch_ts(name): 
    val = datetime.strptime(name[-13:], '%Y%m%d_%H%M') 
    return val 

incoming_dict = {'20170410_1133': 'A', '20170412_1133': 'B'} 
print("starting with: {}".format(incoming_dict)) 
print(sorted(incoming_dict, key=_fetch_ts)) 
sorted_dict = OrderedDict([(x,incoming_dict[x]) for x in sorted(incoming_dict, key=_fetch_ts)]) 
print("gives  : {}".format(incoming_dict)) 
print("should be A or B: {}".format(sorted_dict.values()[0])) 
+0

それは素晴らしいディテールです。しかし、私は最初の解決策をとると思います。私はそれが少しわかりやすいと思う。 – GhostCat

関連する問題