python - 为什么字典的键进入项目内部?
问题描述
我有一个问题,在我看来这没有意义。我正在定义一个字典并使用它来生成一个列表,其中键是列表的第一个元素。但是当我运行它时,不仅创建了列表,还修改了字典。我需要知道为什么会发生这种情况,以及在不修改字典的情况下我可以通过哪些其他方式来完成此列表。通用代码示例如下:
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']}
怎么了?
解决方案
for item in self.dict_content.items(): new_items = item[1] new_items.insert(0, item[0]) labels.append(new_items)
这里,new_items
尽管它的名字,不是一个新列表,而是对包含在 中的原始列表的引用dict_content
。
通过使用它的方法,你修改了这个列表,这在稍后insert
查看时会有所体现。dict_content
您不想修改原始列表,而是要创建一个新列表。例如,通过串联:
for item in self.dict_content.items():
new_items = [item[0]] + item[1]
labels.append(new_items)
推荐阅读
- angular - 显示基于 url Angular 7 的组件
- node.js - vs code:调试在nodejs中运行的打字稿,同时指定源根
- python - 在 linux 中导入 python 版本 3.7.4 中的 theano 库时出错
- sql - SQL将两个带有键的表连接到不同的列
- android - 如何使用图案或密码制作应用程序锁定应用程序
- c++ - 覆盖函数但保留对原始函数的引用
- php - Symfony entitymanager 拒绝插入一列
- python - NLP - 从句子中查找关键字
- javascript - 如何通过 screen.availWidth (而不是平板电脑、笔记本电脑等)准确检测手机是否
- java - 如何从属性文件中读取列表值