用python中的动态键和值更新字典
我有一个字典,我想动态插入键和值,但我没有做到这一点。问题是,当我使用update方法时,它不会添加一对,但会删除以前的值,因此在打印字典时,我只有最后一个值 这是我的密码用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)
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