Python:将用户输入作为列表添加到字典

2024-10-01 00:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下脚本。我要求用户提供类别,每个类别都可以按照用户给定的几种不同方式进行排序。 因此,输出应类似于:

{'a': ['b', 'c'], 'd': ['e', 'f']}

但它来了:

^{pr2}$

我想这是因为我在每一类中都提到了相同的列表。我真的不知道如何使之动态化,而且事后清理清单似乎也不能得到正确的结果。在

有人能给我指出正确的方向吗? 提前谢谢

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)

Tags: 用户脚本trueinputifsettings排序方式
2条回答

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 = []创建一个新列表。不幸的是,你只做了一次。这意味着你只有一张单子。不仅字典中的所有值都具有相同的元素,而且它们是完全相同的对象:

^{pr2}$

sorteer.append(sorteren)不创建列表的副本。因此,所有的键都映射到您拥有的唯一列表,即您在开始时创建的列表。在

修复代码的最简单方法是在每次启动while的新循环时创建一个新列表。在

在python中,列表是可变的,并且您使用排序器对settings dict中的键使用list。每次在list中进行更改(添加或删除元素),它都会反映出您使用同一列表时的每个键。详细了解请参考: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']}

相关问题 更多 >