26

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

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'

問題がわかりません

4

3 に答える 3

51

次の行を削除します。

    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))}
于 2012-12-13T12:38:06.897 に答える
4

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
于 2016-02-18T02:56:34.730 に答える
1

@NPEは、コードの問題を指摘しました(反復ごとにdictを再定義します)。

dict(Python 3コード)を生成するもう1つの方法は次のとおりです。

from operator import itemgetter

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

About KeyError: '1'input()はPython 3で文字列を返しますが、辞書mydictは整数を想定しています。文字列を整数に変換するには、次のように呼び出しますint

nb_name = int(input("\nChoose the number of the name :"))
于 2012-12-13T12:54:37.820 に答える