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

用python中的动态键和值更新字典,python,dictionary,python-3.x,key,Python,Dictionary,Python 3.x,Key,我有一个字典,我想动态插入键和值,但我没有做到这一点。问题是,当我使用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)

我有一个字典,我想动态插入键和值,但我没有做到这一点。问题是,当我使用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'
回溯(最近一次呼叫最后一次):
文件“../test.py”,第37行,在
如果o[“名称”]==mydic[nb_名称]:
KeyError:“1”

我不明白问题所在

请删除以下行:

    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))}
在代码中(在每次迭代中重新定义dict)

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


关于
KeyError:'1'
input()
在Python 3中返回一个字符串,但字典
mydict
需要一个整数。要将字符串转换为整数,请调用
int

nb_name = int(input("\nChoose the number of the name :"))
您可以使用
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

您可以将
start=1
传递到
enumerate()
以匹配问题中的代码,而无需
i+1
为什么说这是python 3代码?我看不出有任何理由让python 2失败。。。尽管如此,我可能会将其写成:
dict(枚举((x['name']表示iterload(f))中的x,start=1))
,或者可能会移动
枚举(/code>):
dict((I,x['name]),表示iterload(f),start=1)中的I,x
。我用生成器表达式替换了
map
。在python3中,这是相同的事情,但在python3和python2中,这将做完全相同的事情——我认为它更容易阅读。@mgilson:
map
在python2中返回一个列表。要使其成为Python 2代码,您可以从itertools中添加
,并将imap导入为map
。为了便于阅读,我将使用@NPE答案中的dict理解。我知道map将返回py2k中的列表。但是代码可能仍然可以工作(除非文件很大)——在这种情况下,将数据存储在dict中也可能不起作用。听写理解很好,但它规定了python2.7的最低要求。使用
dict
的我的版本试图满足一种快乐的媒介——生成器的行为类似于您的
map
,但用于python2.x和IMHO的生成器更易于阅读+使用
dict
构造函数以与较旧的python版本兼容的方式创建dict。(它读起来和dict comp没什么区别)
#!/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