Python 为什么字典的键会在条目中?
我有一个问题,在我看来,这是没有意义的。我正在定义一个字典并使用它生成一个列表,其中键是列表的第一个元素。但是当我运行它时,不仅创建了列表,而且修改了字典。我需要知道为什么会发生这种情况,以及在不修改字典的情况下,我可以用哪种方式来完成这个列表。一般代码示例如下所示:Python 为什么字典的键会在条目中?,python,list,dictionary,Python,List,Dictionary,我有一个问题,在我看来,这是没有意义的。我正在定义一个字典并使用它生成一个列表,其中键是列表的第一个元素。但是当我运行它时,不仅创建了列表,而且修改了字典。我需要知道为什么会发生这种情况,以及在不修改字典的情况下,我可以用哪种方式来完成这个列表。一般代码示例如下所示: class report: def __init__(self): self.dict_content= self.get_dict() self.labels = self.get_la
class report:
def __init__(self):
self.dict_content= self.get_dict()
self.labels = self.get_labels()
def get_dict(self):
dict_content = dict(A1 = ['a', 'b', 'c'], A2 = ['d', 'e', 'f'])
return dict_content
def get_labels(self):
labels = []
for item in self.dict_content.items():
new_items = item[1]
new_items.insert(0, item[0])
labels.append(new_items)
return labels
呼叫控制台
r = report()
labels = r.labels
print(labels)
[['A1', 'a', 'b', 'c'], ['A2', 'd', 'e', 'f']]
dict_content = r.dict_content
print(dict_content)
{'A1': ['A1', 'a', 'b', 'c'], 'A2': ['A2', 'd', 'e', 'f']}
如果我注释行self.labels=self.get_labels()
并执行最后的操作,我会得到:
r = report()
dict_content = r.dict_content
print(dict_content)
{'A1': ['a', 'b', 'c'], 'A2': ['d', 'e', 'f']}
我所期望的是:
r = report()
labels = r.labels
print(labels)
[['A1', 'a', 'b', 'c'], ['A2', 'd', 'e', 'f']]
dict_content = r.dict_content
print(dict_content)
{'A1': ['a', 'b', 'c'], 'A2': ['d', 'e', 'f']}
发生了什么事
在这里,new\u items
,尽管名称不同,但它不是一个新列表,而是对dict\u content
中包含的原始列表的引用
通过使用其insert
方法,您可以修改此列表,这将在以后查看dict\u内容时反映出来
您希望创建一个新列表,而不是修改原始列表。例如,通过连接:
for item in self.dict_content.items():
new_items = [item[0]] + item[1]
labels.append(new_items)
在这里,new\u items
,尽管名称不同,但它不是一个新列表,而是对dict\u content
中包含的原始列表的引用
通过使用其insert
方法,您可以修改此列表,这将在以后查看dict\u内容时反映出来
您希望创建一个新列表,而不是修改原始列表。例如,通过连接:
for item in self.dict_content.items():
new_items = [item[0]] + item[1]
labels.append(new_items)
你能把你期望的也发出来吗?我有一个很好的猜测,但我不想假设。我希望它会像上次输入显示的那样。我正在编辑它,这样它可以更清晰。你也可以发布你希望它是什么吗?我有一个很好的猜测,但我不想假设。我希望它会像上次输入显示的那样。我正在编辑它,以便更清晰。