python 2.7列表,我不知道的东西';安徒生
我有下面的Python2.7,这让我很疯狂,我错过了什么吗python 2.7列表,我不知道的东西';安徒生,python,Python,我有下面的Python2.7,这让我很疯狂,我错过了什么吗 my_list = [ { "cluster_name": "a"},{"cluster_name": "a"},{"cluster_name": "b"}] ret = [] c_list = [] for obj in my_list: #ret.append(obj) if obj["cluster_name"] not in c_list:
my_list = [ { "cluster_name": "a"},{"cluster_name": "a"},{"cluster_name": "b"}]
ret = []
c_list = []
for obj in my_list:
#ret.append(obj)
if obj["cluster_name"] not in c_list:
c_list.append(obj["cluster_name"])
ret.append({
'obj': obj,
'c_list': c_list
})
return ret
获取结果:
"c_list": [
"a",
"b" <= why b is set here?
],
"obj": {
"cluster_name": "a"
}
},
{
"c_list": [
"a",
"b"
],
"obj": {
"cluster_name": "b"
}
}
]
“c_列表”:[
“a”,
“b”您需要创建c\u列表的“副本”
my_list = [ { "cluster_name": "a"},{"cluster_name": "a"},{"cluster_name": "b"}]
ret = []
c_list = []
for obj in my_list:
#ret.append(obj)
if obj["cluster_name"] not in c_list:
c_list.append(obj["cluster_name"])
ret.append({
'obj': obj,
'c_list': [x for x in c_list] # create copy!
})
print(ret)
输出:
[{'c_list': ['a'], 'obj': {'cluster_name': 'a'}},
{'c_list': ['a', 'b'], 'obj': {'cluster_name': 'b'}}]
事实上,我的版本是2.7.5。它没有改变任何问题,因为“集群名称”:b在您的列表中?只有一个变量c_列表。仅仅因为您将其附加到另一个数据结构并不意味着您“冻结”它仍处于当前状态。它仍然是一个列表,您可以在以后的代码中修改它。当您打印它时,您将在打印时看到它的内容;因此,如果您在最后打印一次,您将看到它的最终值,而不是中间值。Maurice Mayer的回答是正确的,但您应该理解它为什么有效。它有效在所有Python版本(以及我所知道的所有其他语言)中都是这样。太棒了!就我而言,如果[x for x in c_list]中的obj[“cluster_name”]不起作用,这很奇怪,不是吗?