web-dev-qa-db-ja.com

pythonの動的キーと値で辞書を更新します

辞書があり、キーと値を動的に挿入したいのですが、どうにかできませんでした。問題は、更新メソッドを使用するとペアが追加されないが、以前の値が削除されるため、ここで辞書を印刷するときに最後の値しか得られないということです。

i = 0
for o in iterload(f):
    i=i+1
    mydic = {i : o["name"]}
    mydic.update({i : o["name"]})
    for k, v in mydic.items():
        print(k,v) 
print(mydic)

fは、pythonコードを使用して解析しているファイルです。その結果、

{3: 'toto'}

これが最後の要素です。私の辞書にすべての要素を含める解決策はありますか

前もって感謝します

別の質問があります

入力値がディクショナリのキーと等しいかどうかを確認する必要があります。そうである場合は、ファイルの解析を続行して他の情報を取得するために、このキーの値を取得する必要があります。

これが私のコードです:

f = open('myfile','r')
nb_name = input("\nChoose the number of the name :")

for o in iterload(f):
    if o["name"] == mydic[nb_name]: 
        ...

KeyErrorが発生する

Traceback (most recent call last):
  File ".../test.py", line 37, in <module>
            if o["name"] == mydic[nb_name]: 
KeyError: '1'

私は問題を理解していません

16
user850287

次の行を削除します。

    mydic = {i : o["name"]}

ループの前に次を追加します。

mydic = {}

それ以外の場合は、すべての反復で真新しい1要素辞書を作成します。

また、次のとおりです。

mydic.update({i : o["name"]})

より簡潔に書かれています

mydic[i] = o["name"]

最後に、ループ全体を辞書内包として書き直すことができることに注意してください。

mydic = {i+1:o["name"] for i,o in enumerate(iterload(f))}
34
NPE

len()を使用して値を挿入できます:

#!/usr/bin/python

queue = {}

queue[len(queue)] = {'name_first': 'Jon', 'name_last': 'Doe'}
queue[len(queue)] = {'name_first': 'Jane', 'name_last': 'Doe'}
queue[len(queue)] = {'name_first': 'J', 'name_last': 'Doe'}

print queue
2
HelpNeeder

@ NPEが問題を指摘しました コード内(各反復でdictを再定義)。

Dict(Python 3コード)を生成するもう1つの方法を次に示します。

_from operator import itemgetter

mydict = dict(enumerate(map(itemgetter("name"), iterload(f)), start=1))
_

_KeyError: '1'_について:input()はPython 3で文字列を返しますが、ディクショナリmydictは整数を期待しています。文字列を整数に変換するには、 intを呼び出す:

_nb_name = int(input("\nChoose the number of the name :"))
_
1
jfs