1

私の目標は、小さな辞書を大きな辞書にマップし、小さな辞書に対応するキーを持つ大きな辞書の値のリストを返すことです。

x={'red':0.25, 'yellow':0.05, 'pink':0.35, 'brown':0.22, 'blue':0.13}
y={'red':2, 'blue':3, 'yellow':1}

私のコードは、大きな辞書の完全な値のリストを提供し続けます。

for b in x.keys():
    if b in y.keys():
        k=y.values()
print k

output: [0.35, 0.22, 0.13, 0.05, 0.25]

Desired output:
[0.25,0.13,0.05]

助言がありますか?ありがとう。

4

4 に答える 4

2

このようなもの?これらは辞書なので、順序は関係ないと思います。また、 を反復処理しているように見えるため、 に存在しないx.keys()値がいくつかある可能性があり、それらをマップしたくないと仮定します。yx

>>> x={'red':0.25, 'yellow':0.05, 'pink':0.35, 'brown':0.22, 'blue':0.13}
>>> y={'red':2, 'blue':3, 'yellow':1}
>>> [val for elem, val in x.items() if elem in y]
[0.13, 0.05, 0.25]

にない値が にない場合はy、単に辞書xを反復処理できます。y

>>> [x[key] for key in y]
[0.13, 0.05, 0.25]

PS - コードの問題は、一致を見つけるたびにy.values()toのリスト全体を割り当てるためk、値の完全なリストになってしまうことです。コードを次のように変更できます

>>> k = []
>>> for b in x.keys():
    if b in y.keys():
        k.append(x[b])


>>> k
[0.13, 0.05, 0.25]

ただし、辞書を反復すると、次のように同様の結果が得られます

>>> for b in x:
    if b in y:
        k.append(x[b])


>>> k
[0.13, 0.05, 0.25]
于 2013-08-24T09:40:05.007 に答える
1
k = [x[key] for key in y.keys()]
于 2013-08-24T09:40:56.250 に答える
1

コードの問題は、に割り当てy.values()ていることkです。したがって、あなたkは dict の値のリストに他なりませんy。次のようにコードを変更して、機能させることができます。

k = []
for b in x.keys():
    if b in y.keys():
        k.append(x[b])
print k

リスト内包表記も使用できます。

>>> x={'red':0.25, 'yellow':0.05, 'pink':0.35, 'brown':0.22, 'blue':0.13}
>>> y={'red':2, 'blue':3, 'yellow':1}

>>> [x[key] for key in y]
[0.13, 0.05, 0.25]
于 2013-08-24T09:41:09.080 に答える