将不同的词典合并到一个列表中
Merging different dictionaries together in one list
我在这个post的指导下创建了4套不同的词典:Python variables as keys to dict。我现在想将所有这些词典合并到 1 个列表中。我尝试了以下方法:
classes = ['apple', 'orange', 'pear', 'mango']
class_dict = {}
store = []
for fruit in classes:
if fruit == "orange":
o = 2
q = 1
else:
o = 0
q = 0
for j in ('fruit', 'o', 'q'):
class_dict[j] = locals()[j]
print (class_dict)
store.append(class_dict)
print ("store: ", store)
输出结果如下图。如您所见,store 只包含每次附加到它的相同字典的列表。我不确定哪里出错了,如果能提供一些帮助,我们将不胜感激!
{'fruit': 'apple', 'o': 0, 'q': 0}
{'fruit': 'orange', 'o': 2, 'q': 1}
{'fruit': 'pear', 'o': 0, 'q': 0}
{'fruit': 'mango', 'o': 0, 'q': 0}
store: [{'fruit': 'mango', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}]
您需要将 class_dict
移到循环内。
classes = ['apple', 'orange', 'pear', 'mango']
store = []
for fruit in classes:
class_dict = {}
if fruit == "orange":
o = 2
q = 1
else:
o = 0
q = 0
for j in ('fruit', 'o', 'q'):
class_dict[j] = locals()[j]
print (class_dict)
store.append(class_dict)
print ("store: ", store)
输出:
{'fruit': 'apple', 'o': 0, 'q': 0}
{'fruit': 'orange', 'o': 2, 'q': 1}
{'fruit': 'pear', 'o': 0, 'q': 0}
{'fruit': 'mango', 'o': 0, 'q': 0}
store: [{'fruit': 'apple', 'o': 0, 'q': 0}, {'fruit': 'orange', 'o': 2, 'q': 1}, {'fruit': 'pear', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}]
您应该只在循环内移动 class_dict
:
classes = ['apple', 'orange', 'pear', 'mango']
store = []
for fruit in classes:
class_dict = {}
if fruit == "orange":
o = 2
q = 1
else:
o = 0
q = 0
for j in ('fruit', 'o', 'q'):
class_dict[j] = locals()[j]
print (class_dict)
store.append(class_dict)
print ("store: ", store)
这是因为 dict
是 python 中的可变对象,并且在 for
循环的每次迭代中,您都会更改全局变量 class_dict
的值。简单的例子:
>>> a = {'a': 1, 'b': 2}
>>> a
{'a': 1, 'b': 2}
>>> b = a
>>> b
{'a': 1, 'b': 2}
>>> b['c'] = 3
>>> b
{'a': 1, 'b': 2, 'c': 3}
>>> a
{'a': 1, 'b': 2, 'c': 3}
当您在循环内移动 class_dict
时,此变量变为局部变量并且循环的迭代变得独立。
我在这个post的指导下创建了4套不同的词典:Python variables as keys to dict。我现在想将所有这些词典合并到 1 个列表中。我尝试了以下方法:
classes = ['apple', 'orange', 'pear', 'mango']
class_dict = {}
store = []
for fruit in classes:
if fruit == "orange":
o = 2
q = 1
else:
o = 0
q = 0
for j in ('fruit', 'o', 'q'):
class_dict[j] = locals()[j]
print (class_dict)
store.append(class_dict)
print ("store: ", store)
输出结果如下图。如您所见,store 只包含每次附加到它的相同字典的列表。我不确定哪里出错了,如果能提供一些帮助,我们将不胜感激!
{'fruit': 'apple', 'o': 0, 'q': 0}
{'fruit': 'orange', 'o': 2, 'q': 1}
{'fruit': 'pear', 'o': 0, 'q': 0}
{'fruit': 'mango', 'o': 0, 'q': 0}
store: [{'fruit': 'mango', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}]
您需要将 class_dict
移到循环内。
classes = ['apple', 'orange', 'pear', 'mango']
store = []
for fruit in classes:
class_dict = {}
if fruit == "orange":
o = 2
q = 1
else:
o = 0
q = 0
for j in ('fruit', 'o', 'q'):
class_dict[j] = locals()[j]
print (class_dict)
store.append(class_dict)
print ("store: ", store)
输出:
{'fruit': 'apple', 'o': 0, 'q': 0}
{'fruit': 'orange', 'o': 2, 'q': 1}
{'fruit': 'pear', 'o': 0, 'q': 0}
{'fruit': 'mango', 'o': 0, 'q': 0}
store: [{'fruit': 'apple', 'o': 0, 'q': 0}, {'fruit': 'orange', 'o': 2, 'q': 1}, {'fruit': 'pear', 'o': 0, 'q': 0}, {'fruit': 'mango', 'o': 0, 'q': 0}]
您应该只在循环内移动 class_dict
:
classes = ['apple', 'orange', 'pear', 'mango']
store = []
for fruit in classes:
class_dict = {}
if fruit == "orange":
o = 2
q = 1
else:
o = 0
q = 0
for j in ('fruit', 'o', 'q'):
class_dict[j] = locals()[j]
print (class_dict)
store.append(class_dict)
print ("store: ", store)
这是因为 dict
是 python 中的可变对象,并且在 for
循环的每次迭代中,您都会更改全局变量 class_dict
的值。简单的例子:
>>> a = {'a': 1, 'b': 2}
>>> a
{'a': 1, 'b': 2}
>>> b = a
>>> b
{'a': 1, 'b': 2}
>>> b['c'] = 3
>>> b
{'a': 1, 'b': 2, 'c': 3}
>>> a
{'a': 1, 'b': 2, 'c': 3}
当您在循环内移动 class_dict
时,此变量变为局部变量并且循环的迭代变得独立。