我有以下脚本。我向用户询问类别,并且可以通过用户给出的几种不同方式对每个类别进行排序。 因此输出应该是这样的:
{'a': ['b', 'c'], 'd': ['e', 'f']}
但它来了:
{'a': ['b', 'c', 'e', 'f'], 'd': ['b', 'c', 'e', 'f']}
我认为这是因为我在每个类别中引用相同的列表。我真的不知道如何使它动态化,然后清除列表似乎也没有给出正确的结果。
有人能指出我正确的方向吗? 提前致谢
def user_settings():
settings = {}
sorteer = []
while True:
categorie = input('wat wordt de naam van de categorie: \n')
if categorie == 'q':
break
while True:
sorteren = input('waar wil je op sorteren: \n')
if sorteren == 'q':
break
sorteer.append(sorteren)
settings[categorie] = sorteer
print(settings)
答案 0 :(得分:0)
在python列表中是可变的,你正在使用 sorteer 列表来设置dict中的键。每次在列表中进行更改(添加或删除元素)时,当您使用相同的列表时,它会反映每个键。有关详细信息,请参阅:Does Python have an immutable list?
您可以将程序更改为:
def user_settings():
settings = {}
while True:
categorie = input('Enter category: \n')
if categorie == 'q':
break
while True:
sorteren = input('enter range: \n')
if sorteren == 'q':
break
if categorie in settings: #for python2.X use if settings.has_key(categorie)
settings[categorie].append(sorteren)
else:
settings[categorie]=[sorteren]
print(settings)
user_settings()
输出:
{'a': ['b', 'c'], 'd': ['e', 'f']}
答案 1 :(得分:0)
tl; dr 向下移动sorteer = []
一行,以便它在while循环中
def user_settings():
settings = {}
while True:
sorteer = []
categorie = input('wat wordt de naam van de categorie: \n')
if categorie == 'q':
break
while True:
sorteren = input('waar wil je op sorteren: \n')
if sorteren == 'q':
break
sorteer.append(sorteren)
settings[categorie] = sorteer
print(settings)
<强>说明:强>
sorteer = []
创建一个新列表。不幸的是,你只做过一次。这意味着你只有一个列表。不仅字典的所有值都具有相同的元素,而且它们是完全相同的对象:
>>> sorteer['a'] == sorteer['d']
True
>>> sorteer['a'] is sorteer['d']
True
sorteer.append(sorteren)
不会创建列表的副本。因此,所有键都映射到您拥有的唯一列表,即您在开头创建的列表。
修复代码的最简单方法是每次启动while
的新循环时创建新列表。