使用python中的动态键和值更新字典

use*_*287 15 python dictionary key python-3.x

我有一个字典,我想动态插入键和值,但我没有设法做到这一点.问题是,当我使用的更新方法不增加一对,但这样我只有最后一个值的时候,这里印刷的字典是我的代码将删除以前的值

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)
Run Code Online (Sandbox Code Playgroud)

f是我正在使用python代码解析的文件,因为我得到了

{3: 'toto'}
Run Code Online (Sandbox Code Playgroud)

这是最后一个元素.有没有解决方案,我的词典中包含所有元素

提前致谢

我有另一个问题

现在我需要知道输入值是否等于我的字典中的键,如果是,我需要获取此键的值以继续解析文件并获取其他信息.

这是我的代码:

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

for o in iterload(f):
    if o["name"] == mydic[nb_name]: 
        ...
Run Code Online (Sandbox Code Playgroud)

我得到一个keyError

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

我不明白这个问题

NPE*_*NPE 33

删除以下行:

    mydic = {i : o["name"]}
Run Code Online (Sandbox Code Playgroud)

并在循环之前添加以下内容:

mydic = {}
Run Code Online (Sandbox Code Playgroud)

否则,您将在每次迭代时创建一个全新的单元素字典.

另外,以下内容:

mydic.update({i : o["name"]})
Run Code Online (Sandbox Code Playgroud)

更简洁地写成

mydic[i] = o["name"]
Run Code Online (Sandbox Code Playgroud)

最后,请注意整个循环可以重写为字典理解:

mydic = {i+1:o["name"] for i,o in enumerate(iterload(f))}
Run Code Online (Sandbox Code Playgroud)

  • 你可以将`start = 1`传递给`enumerate()`以匹配没有`i + 1`的问题的代码 (4认同)