2016-09-11 7 views
3

私はPythonが初めてです。私の質問は、経験豊富な開発者やコーダーにとってシンプルであるかもしれませんが、私はこれに対する答えを見つけることができませんでした。各辞書に3つのキーがある辞書のPythonリストから3つの別々の値リストを作成するには

データベースクエリでデータを取得しています。私は3つのキーと各キーに対応する値を持つ辞書としてクエリによって返された各行を整理することに成功しました。基本的には、クエリによって返されたすべての行のデータを辞書のリストにまとめました。

辞書のリストには多少のようになります。

[ 
    {'Date': date1, 'price': price1, 'itemnumber': number1}, 
    {'Date': date2, 'price': price2, 'itemnumber': number2}, 
    ... 
] 

は、どのように私は、各キーすなわち日付、価格およびitemnumberに対応する3つの別々のリストに辞書のリストを変換することができますか?

はあなたの助けをいただき、ありがとうございます。あなたがlistcompとdictcomp組み合わせることができ

答えて

1
# Defining lists 
dates = [] 
prices = [] 
item_numbers = [] 
# Loop through list 
for dictionary in your_list: 
    dates.append(dictionary["Date"]) # Add the date to dates 
    prices.append(dictionary["price"]) # Add the price to prices 
    # Add item number to item_numbers 
    item_numbers.append(dictionary["itemnumber"]) 
+0

試してみてください!うまくいく。ありがとうございました! – user2650280

3

:我々は3つの別々のリストを持っている

In [95]: ds 
Out[95]: 
[{'Date': 'date1', 'itemnumber': 'number1', 'price': 'price1'}, 
{'Date': 'date2', 'itemnumber': 'number2', 'price': 'price2'}] 

In [96]: {key: [subdict[key] for subdict in ds] for key in ds[0]} 
Out[96]: 
{'Date': ['date1', 'date2'], 
'itemnumber': ['number1', 'number2'], 
'price': ['price1', 'price2']} 

注意を、彼らはより便利辞書の値として保存されます。このようにして、追加の特性(「購入者」など)を追加することを決定した場合、ロジックを変更する必要はありません。ないように編集

+0

エレガント!これも試してみて、それは素晴らしいです!あなたのプロットの助けをありがとうございました。 – user2650280

0
for (field,values) in [(field, 
      [result.get(field) for result in results] 
     ) for field in results[0].keys()]: 
    # this is ugly, but I can't see any other legal way to 
    # dynamically set variables. 
    eval "%s=%s" % (field, repr(value)) 

[不法] locals()辞書:(

+0

['locals()'](https://docs.python.org/3/library/functions.html#locals)のドキュメントでは特に修正しないと言い、実際には関数内では機能しませんメモリが提供されている場合、CPythonで。 – DSM

+0

あなたは正しいです、私はショートカットを取っていました。実際に私のPython 2.6.6インタプリタで動作しますが、修正します。 –

5

使用リスト内包変更:

date = [d['Date'] for d in list_of_dicts] 
price = [d['price'] for d in list_of_dicts] 
itemnumber = [d['itemnumber'] for d in list_of_dicts] 

一つも読みにくくでこれを行うことができますがライナー:

date, price, itemnumber = zip(*[(d['Date'], d['price'], d['itemnumber']) for d in list_of_dicts]) 

map(list, ...)を使用して、返されたタプルを2番目のケースのリストに変換します。

+1

コードの文脈に応じて、キー入力( '日付'、 '価格'、 '項目番号')のために 'columns = [[d [list for_dictsのdのキー]]として、 ' –

+0

@SteveJessopこれは、zipの転置のより直感的な置き換えになります。いいです! –

+0

@MosesとSteve Jessop、あなたの答えは大いに役立ちます。言うまでもなく私は試して働いています。私は新しいことを学びました。ありがとうございました! – user2650280

関連する問題