0

辞書でループする場合、ループ内の値を変更するにはどうすればよいですか。例えば:

listt=[1,4,2]
mydict=[a:d, c:b, q:r]

私は作ろうとしています:

for i in listt:
     for key in mydict:
           mydict[key]=i

しかし、これは機能しません。発生するのは、i 番目の値が最後の値になることです。私の新しい辞書では、常に a:2、c:2 などですa:1, b:4, q:2。私が考える i 番目の値を保存し、それを使用して辞書の値を変更する必要があります。私が何を得ているのかわかりませんが!どんな助けでも大歓迎です!

4

2 に答える 2

1

辞書のキーは順序付けされていません。listtしたがって、 dict 内のアイテムとキーの間のペアリングを制御することはできませんmydict

ただし、OrderedDictのキー 順序付けされています。

import collections

listt=[1,4,2]
mydict=collections.OrderedDict([('a','d'), ('c','b'), ('q','r')])
for item, key in zip(listt, mydict):
    mydict[key] = item

print(mydict)    

収量

OrderedDict([('a', 1), ('c', 4), ('q', 2)])
于 2013-03-15T19:16:52.573 に答える
0

ここにはいくつかの誤解がありdictます:

同じキーと新しい値(新しいリストから提供された値)で辞書を「更新」したいようです。問題は、辞書が格納されたアイテムを順番に保持しないことです。辞書は、辞書を順番{a:d, c:b, q:r}に反復できるという意味ではありません。[a, c, q]

また、ネストされた for ループを使用しているため、すべての値が の最後の値になりlisttます。

collections.OrderedDict を使用して物事を整理できます。ネストされた for ループの代わりに、zip反復子を結合するために使用します。

したがって、コードは次のようになります。

from collections import OrderedDict

listt = [1, 4, 2]
mydict = OrderedDict([(a, d), (c, b), (q, r)])

mydict = OrderedDict(zip(mydict.keys(), listt))
于 2013-03-15T19:17:55.687 に答える