1

私はこのような単純な python 辞書から始めます:-

In [29]: date_dict
Out[29]: 
{'2003-06-24': 2,
 '2003-08-13': 1,
 '2003-08-19': 2,
 '2003-08-22': 1,
 '2003-08-24': 5}

キーは日付、値は整数です。

私の目標は、この辞書のデータを次のように再編成することです:-

{'datetime': ['2003-08-13',
  '2003-08-19',
  '2003-06-24',
  '2003-08-24',
  '2003-08-22'],
 'observations': [1, 2, 2, 5, 1]}

datetimeこれは、キーが保持するリストとキーが保持するリストの間のデータ関係を維持しobservationsます。

これは、これを行うための私の解決策です:-

In [35]: new_dict
Out[35]: {'datetime': [], 'observations': []}

In [36]: for key, value in date_dict.iteritems():
   ....:     new_dict['datetime'].append(key)
   ....:     new_dict['observations'].append(value)

In [37]: new_dict
Out[37]: 
{'datetime': ['2003-08-13',
  '2003-08-19',
  '2003-06-24',
  '2003-08-24',
  '2003-08-22'],
 'observations': [1, 2, 2, 5, 1]}

私の質問は、これを行うための代替の(より効率的であればなお良い)方法はありますか?

(2 つのリスト間でデータ関係を維持することが重要であることに注意してください。つまり、元の date_dict では、「2003-08-24」は値「5」に対応します。データが再編成された後、「datetime」の 3 番目のインデックス' list は "2003-08-24" であり、'observations list' の 3 番目のインデックス "5" に正しく対応しています。)

4

3 に答える 3

5

多分:

new_dict = {'datetime': date_dict.keys(), 'observations': date_dict.values()}

順序が必要な場合は、dict の代わりにOrderedDictを使用してみてください。

通常の dict メソッドをサポートする dict サブクラスのインスタンスを返します。OrderedDict は、キーが最初に挿入された順序を記憶する辞書です。新しいエントリが既存のエントリを上書きする場合、元の挿入位置は変更されません。エントリを削除して再挿入すると、最後に移動します。

于 2012-11-14T02:31:58.737 に答える
1

どうですか:

dates, observations = zip(*date_dict.items())

次にdatesobservationsリストを好きなようにまとめます。

同じ構成で並べ替えることができます。

dates, observations = zip(*sorted(date_dict.items()))
于 2012-11-14T02:43:43.827 に答える
0

本当に辞書が必要ですか?タプルのリストは、あなたが望むことをより良くすると思います:

observations = [('2003-08-13',1),...]
于 2012-11-14T02:36:57.457 に答える