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

2024-09-30 10:30:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,我想动态地插入键和值,但我没能做到。问题是,当我使用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]: 
        ...

我得到一个关键错误

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

我不明白这个问题


Tags: 文件the代码namein元素forif
3条回答

删除以下行:

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

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

mydic = {}

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

此外,还包括以下内容:

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

更简洁地写为

mydic[i] = o["name"]

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

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

可以使用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

在代码中@NPE pointed out the problem(在每次迭代中重新定义dict)。

下面是生成dict(Python 3代码)的另一种方法:

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 :"))

相关问题 更多 >

    热门问题