Python 2.7 python中的Multidict不工作??如何创建它?
我想创建一个python多维字典:- 现在我是这样做的 multidict={} 循环中Python 2.7 python中的Multidict不工作??如何创建它?,python-2.7,Python 2.7,我想创建一个python多维字典:- 现在我是这样做的 multidict={} 循环中 mulitdict[i] = data 若循环运行十次,我在所有索引中得到相同的值。。 如: 我想要这样的 multidict {0 : {'name':name1, 'age' : age1}, 1: {'name':name2, 'age' : age2} 但我得到如下所示 multidict {0 : {'name':name1, 'age' : age1}, 1: {'name':name
mulitdict[i] = data
若循环运行十次,我在所有索引中得到相同的值。。
如:
我想要这样的
multidict {0 : {'name':name1, 'age' : age1}, 1: {'name':name2, 'age' : age2}
但我得到如下所示
multidict {0 : {'name':name1, 'age' : age1}, 1: {'name':name1, 'age' : age1}
我也尝试了默认的dict…但每次我在所有索引中都得到相同的值。有什么问题
试用代码:
有什么有效的方法可以做到这一点吗
multidict = {}
for j in range(10):
s = {}
s['name'] = raw_input()
s['age'] = input()
multidict[j] = s
这将获得所需的结果听起来您正在将相同的
数据
dict分配给外部多dict
的每个值,并且只需修改它在循环中每次传递时保持的值。这将导致所有的值看起来都相同,与上次通过循环的值相同
您可能需要确保创建一个单独的dictionary对象来保存每个值的数据。一个粗略的解决方法可能是用multidict[i]=dict(data)
替换multidict[i]=data
,但如果您知道数据是如何创建的,您可能可以做一些更优雅的事情
编辑:查看您的代码,以下是解决问题的方法:
csv_parsed_data2 = {}
with open('1112.txt') as infile:
i =0
data = {} # start with empty data dict
for lineraw in infile:
line = lineraw.strip()
if 'sample1 ' in line:
### TO GET SOURCE ROUTER NAME ###
data['sample1'] = line[8:]
elif 'sample2- ' in line:
### TO GET DESTINATION ROUTER NAME ###
data['sample2'] = line[13:]
elif 'sample3' in line:
### TO GET MIN,MAX,MEAN AND STD VALUES ###
min_value = line.replace("ms"," ")
min_data = min_value.split(" ")
data['sample3'] = min_data[1]
csv_parsed_data2[i] = data
data = {} # after saving a reference to the dict, reinitialize it
i = i + 1
print i,'::',csv_parsed_data2,'--------------'
print csv_parsed_data2,' all index has same value'
为了理解到底发生了什么,考虑一下这个简单的情况,我在字典中保存了一个引用,当它有一些旧的值:
my_dict = { "foo": "bar" }
some_ref = my_dict
print some_ref["foo"] # prints "bar"
my_dict["foo"] = "baz"
print some_ref["foo"] # prints "baz", since my_dict and some_ref refer to the same object
print some_ref is d # prints "True", confirming that fact
在您的代码中,my_dict
是data
,some_ref
都是csv\u解析的数据2
的值。它们最终都会成为同一个对象的引用,该对象将保存最后分配给数据的值。您尝试的代码在哪里?非常感谢blcknght…您能再次向我解释一下我没有得到,也是一个很好的方法it@Python_Dude:更新了对代码的修复和更多解释。已理解..但我无法重新初始化数据。。。它有一些值,所以我使用multidict[i]=dict(data)…它是正确的。。。谢谢
my_dict = { "foo": "bar" }
some_ref = my_dict
print some_ref["foo"] # prints "bar"
my_dict["foo"] = "baz"
print some_ref["foo"] # prints "baz", since my_dict and some_ref refer to the same object
print some_ref is d # prints "True", confirming that fact