我有一个字典,我想动态插入键和值,但我没有设法做到这一点。问题是,当我使用更新方法时,它不会添加一对,但它会删除以前的值,所以我在打印字典时只有最后一个值 这是我的代码
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'
我不明白这个问题
答案 0 :(得分:28)
删除以下行:
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))}
答案 1 :(得分:2)
您可以使用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 :(得分:1)
@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 :"))