私は2つの辞書を持っています。 1つはchapter_idとbook_id:{99: 7358, 852: 7358, 456: 7358}
です。ここでは一例として単なる本ですが、たくさんあります。もう1つは同じchapter_idといくつかの情報:{99: [John Smith, 20, 5], 852: [Clair White, 15, 10], 456: [Daniel Dylan, 25, 10]}
。章IDはすべての本を通してユニークです。そして、私はそれがすべての本がそれが含むすべての章から情報を得る方法でそれを組み合わせなければなりません。 {7358:[[99,852,456],[John Smith, Claire White, Daniel Dylan],[20,15,25],[5,10,10]]}
のようなものです。私はまた、すでに各書籍が持っているすべての章のIDを持つ辞書を持ったファイルを持っています。私は両方の辞書(彼らはリストであった)をループすることによってそれを行う方法を知っています。しかし、それは年を取る。そのため、現在は辞書になっており、すべての章で1つのループで管理できると思います。しかし、私の頭の中では、私はいつも本や章のループに戻ります。どんなアイデアも非常に高く評価されています!最終的な結果はファイルに書きますので、それが入れ子になっている辞書なのかどうかはそれほど重要ではありません。または少なくとも私はそう考える。Pythonの1つのループで2つの辞書に反復する
答えて
他のパッケージを使用している場合は、pandas
をご覧になりたい場合は、多くのことを簡単かつ迅速に行うことができます。ここでは、提供したデータに基づく例を示します。
import pandas as pd
d1 = {99: 7358, 852: 7358, 456: 7358}
df1 = pd.DataFrame.from_dict(d1, "index")
df1.reset_index(inplace=True)
d2 = {99: ["John Smith", 20, 5], 852: ["Clair White", 15, 10], 456: ["Daniel Dylan", 25, 10]}
df2 = pd.DataFrame.from_dict(d2, "index")
df2.reset_index(inplace=True)
df = df1.merge(df2, left_on="index", right_on="index")
df.columns = ["a", "b", "c", "d", "e"]
# all data for 7358 (ie subsetting)
df[df.b == 7358]
# all names as a list
list(df[df.b == 7358].c)
それは大きな助けです! 20時間ではなく45秒。私はショックを受けました:)しかし、reset_indexのステップが必要な理由はわかりません – student
うまくいって:) reset_indexを使って行のインデックスから列を作成し、後でマージできます。行名をマージすることは可能かもしれませんが、これを行う方法について私の記憶をリフレッシュするためにドキュメントに多くの時間を費やすことはありませんでした。 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.htmlおよびhttp://pandas.pydata.org/pandas-docs/stable/merging.htmlをさらに確認してください。 –
あなたはいつも同じキーが両方の辞書に表示されていることを考えると、辞書のキーを反復処理することができます:あなたが唯一の章を反復処理する必要が
for chapter_id in dict1:
book_id = dict1[chapter_id]
chapter_info = dict2[chapter_id]
from collections import defaultdict
def append_all(l, a):
if len(l) != len(a):
raise ValueError
for i in range(len(l)):
l[i].append(a[i])
final_dict = defaultdict(lambda: [[],[],[],[]])
for chapter, book in d1.items():
final_dict[book][0].append(chapter)
append_all(final_dict[book][1:], d2[chapter])
。 append_all
関数を明示的な追加で置き換えることはできますが、そうすることは醜いようです。私はこれには方法がないことに驚いていますが、ちょうど私がここでzip
を使用する巧妙な方法を欠場しているかもしれません。
- 1. Pythonで2つの辞書を反復する
- 2. Pythonで辞書の辞書を反復する方法
- 3. Pythonで2つの辞書をループする
- 4. Pythonスパース辞書/反復値
- 5. いくつかの辞書の和集合に反復する
- 6. ループを持つPython辞書
- 7. pythonキー値を持つ辞書を反復的に削除
- 8. Pythonで辞書を持つ2つの辞書をマージするには?
- 9. Python:ループ辞書、一度に2つの鍵
- 10. 2つのリストを1つの辞書にフォーマットする
- 11. 2つのリストを1つの辞書にする
- 12. 2つのLINQ辞書を1つに結合するには?
- 13. ForループPythonの反復合計から辞書値で減算する
- 14. python辞書 - 各値の2つのキー
- 15. フラスコアプリでPython辞書を反復すると1つの値しか返されない
- 16. Pythonで2つのリストを一度に反復する
- 17. Pythonで辞書の2つのリストを結合するには?
- 18. 反復辞書は
- 19. python反復辞書emptysそれ
- 20. ループが辞書のすべての値を反復しない
- 21. intを宣言し、2つのforループから1を反復する
- 22. 2つのpklファイルからPythonのネストされた辞書を作成する方法/ 2つのネストされた辞書を1つに結合するか?
- 23. forループから1つの反復を印刷する
- 24. forループで2つの辞書をトラバースする方法は?
- 25. 辞書のリストを1つの辞書に変換する
- 26. Pythonで辞書の2つのリストに加わる
- 27. 辞書のリストを反復する
- 28. 辞書キーのサブセットを反復する
- 29. 日付を反復する2つのループ
- 30. ただ1つのイテレータで2つのリストを反復するJava
辞書を一緒に圧縮してから、結果をループしてみてください。おそらくまだ高価ですが、試してみる価値があります。実際には、ジェネレータを介して遅延して動作する可能性があるため、実際には非常に安くなる可能性があります。 – Carcigenicate
あなたの最初のdictはdictsのリストです:それはタイプミスですか? – brianpck
@brianpckはい、申し訳ありません – student