あなたがやろうとしていることを正確に理解しているかどうかはわかりません:)
一度に 3 つの値を生成していて、反復ごとにそれらをリストに追加したいようです。私は正しいですか?
list.extendメソッドを使用すると、これを非常に簡単に行うことができます。PyDisplace が以下のコードのように見えると仮定します。PyDisplace は 3 つの要素 pr キーのリストを含む辞書であると推測しているため、アイデアを示すためにいくつかの偽のデータを使用しました。私が離れている場合は、質問を更新してください:)
PyDisplace = {
1: [10, 20, 30],
2: [40, 50, 60],
3: [70, 80, 90],
}
OldDisplace = {
1: [1, 2, 3],
2: [4, 5, 6],
3: [7, 8, 9],
}
R_D = [] # or 'list()' if you will
keys = PyDisplace.keys()
keys.sort()
for val in keys:
DX = PyDisplace[val][0] - OldDisplace[val][0]
DY = PyDisplace[val][2] - OldDisplace[val][3]
DZ = PyDisplace[val][2] - OldDisplace[val][2]
# at each iteration, R_D will be extended with
# three new elements: DX, DY, DZ
R_D.extend([DX, DY, DZ])
print R_D
**Output**
In [71]: print R_D
-------> print(R_D)
[9, 18, 27, 36, 45, 54, 63, 72, 81]
それで、これはあなたがしていることとどう違うのですか?
たとえば、R_D は dict() ではなく list() です。Python のリストは通常 1 次元であるため、ここでの問題により適しているように思われます。また、反復ごとに別のリストでリストを拡張しています。
ディクショナリをトラバースする別の方法は、dict.iteritemsメソッドを使用することです。そうすれば、次のようにキーと値のペアを反復処理できます。
for k,v in PyDisplace.iteritems():
print "key: %s, value: %s" % (k, v)
**Output:**
key: 1, value: [10, 20, 30]
key: 2, value: [40, 50, 60]
key: 3, value: [70, 80, 90]
編集:
ありがとう。この時点では、最初のものは私に適しているようです。繰り返しますが、私はPythonが初めてです。最終的には多くのことを学ぶことになりますが、その意味で、2 番目の方法を取得するのは簡単ではありません。つまり、Python について多くのことを知る必要があります。「dict.iteritems」など、あなたが言及したキーワードをstduします....ありがとう。– user1678622 2時間前
dict.iteritems () が行うことは、dict.keys()が行うことと多少同じであり、反復する方法は既に知っています。
より単純な例を考えてみましょう。次のように反復できます。
for key, value in dictionary.items():
print "key: %s\nvalue: %s" % (key, value)
違いは、dict.iteritems()は反復可能なオブジェクトを返すことです...反復できます。for ループに対しては同じですが、内部では、リストは一度に 1 項目ずつ返されます。たとえば、大きな辞書では時間がかかる可能性がある 1 つのステップで構築されるのではありません。ファズの一部が解消されたことを願っています:)?