0

辞書を作成し、次のキーと値を保存したとします。

bod = { "Test1" : 12345, "Test2" : 1323242, ... }

新しいリストを作成し、次の値を持っている場合

bof = ["Test3", "Test1", "Test4", "Test2"]

次のコード (疑似) を使用して、dict 変数を呼び出しとして使用してリストと一致させ、一致したキーの値を新しい変数内に割り当てることは可能ですか?

for l in bof:
    newbof = line.split()
      try:
        newvalues = bod[values]
        print newvalues
4

3 に答える 3

3
>>> bod = { "Test1" : 12345, "Test2" : 1323242 }
>>> bof = ["Test3", "Test1", "Test4", "Test2"]
>>> [bod.get(x) for x in bof]
[None, 12345, None, 1323242]

その他のバリエーション

>>> [bod.get(x, 0) for x in bof]
[0, 12345, 0, 1323242]
>>> [bod[x] for x in bof if x in bod]
[12345, 1323242]
于 2012-10-17T06:09:39.480 に答える
0

私の理解では、あなたの質問を完全に理解することはできませんが、

newvalues=[]
for i in bof:
  if bod.get(i):
    newvalues.append(bod[i])
print newvalues

最適化された、

newvalues=[bod[i] for i in bof if bod.get(i)]
于 2012-10-17T06:10:56.910 に答える
0

私が理解する限りでは:

In [325]: bod = { "Test1" : 12345, "Test2" : 1323242}

In [326]: bof = ["Test3", "Test1", "Test4", "Test2"]

In [327]: [bod[i ]for i in bof if i in bod]
Out[327]: [12345, 1323242]

または、bod にない値を保持する場合:

In [332]: [bod[x] if x in bod else x for x in bof]
Out[332]: ['Test3', 12345, 'Test4', 1323242]

また

[bod.get(x,x) for x in bof]
Out[333]: ['Test3', 12345, 'Test4', 1323242]

またget、using の方がやや簡潔ですが、using の方inが高速であることに注意してください。

In [337]: % timeit [bod[x] if x in bod else x for x in bof]
1000000 loops, best of 3: 1.39 us per loop

In [338]: % timeit [bod.get(x,x) for x in bof]
100000 loops, best of 3: 1.88 us per loop
于 2012-10-17T06:12:08.527 に答える