【问题标题】:How can I implement this program using a dictionary rather than a list?如何使用字典而不是列表来实现这个程序?
【发布时间】:2016-09-12 21:55:26
【问题描述】:

我有我编写的这个程序,我使用了一个列表,因为您可以轻松地附加到它。使用字典,您不能附加到它。所以我想知道是否有一种方法可以用字典而不是列表来编写这个程序,如果是,那么如何呢?

我希望输出保持不变。只是当您将store = [] 更改为字典为store = {} 时,我该如何更改程序的其余部分,我只更改特定变量以从列表转到字典?

def SSN():

    store = []

    for i in range(0, 100):
        store.append([])
    i = 0
    name = 'key'
    while(name != ''):
        name = input('Enter Name: ')
        if(name == ''):
            if(i<1):
                break
            j=0
            while(j < i):
                print(store[j][0] + ' has SSN ' + store[j][1])
                j = j+1
            break
        j=0
        val = 0
        while(j < i):
            if(name == store[j][0]):
                val = 1
                break
            j = j + 1
        if(val == 1):
            update = input(name + ' has SSN ' + store[j][1] + '. Update? ')
            if(update == 'y'):
                store[j][1] = input('Enter SSN: ')
        else:
            ssn = input('Enter SSN: ')
            store[i].append(name)
            store[i].append(ssn)
            i = i+1
SSN()

这完全符合我的要求,但它只是我想要的字典。 谢谢!

对于输出,我有这个:

Enter Name:约翰 Enter SSN: 1234 Enter Name:麦克 Enter SSN: 5678 Enter Name: wazowski Enter SSN: 0000 Enter Name:麦克 mike has SSN 5678. Update?ý Enter SSN: 6644 Enter Name:约翰 john has SSN 1234. Update? N Enter Name: john has SSN 1234 mike has SSN 6644 wazowski has SSN 0000

空格中的单词代表用户在程序提示时输入的内容。

【问题讨论】:

  • 你能给我们展示一个输入和期望输出的例子吗?更容易准确理解您的要求。
  • @Cyb3rFly3r 在问题正文中更新。希望这会有所帮助。结果,我希望它保持不变。只是当您将store = [] 更改为字典为store = {} 时,我该如何更改程序的其余部分,我只更改特定变量以从列表转到字典?
  • 那么,如果您想将 (name, ssn) 对存储在字典中并能够在名称已经存在的情况下更新 ssn 是否正确?
  • @Cyb3rFly3r 正确。这正是我想要的。

标签: python list python-3.x dictionary append


【解决方案1】:

store 设置为dict 是个好主意,它可以摆脱用于从中查找项目的所有循环。更改后的程序如下所示:

def SSN():
    store = {}
    while True:
        name = input('Enter Name: ')
        if not name:
            for k, v in store.items():
                print(k + ' has SSN ' + v)
            break

        if name in store:
            if input(name + ' has SSN ' + store[name] + '. Update? ') != 'y':
                continue

        store[name] = input('Enter SSN: ')

在上面的store.items() 中,从字典中返回键值对,其中键是名称,值是 SSN。 name in store 返回布尔值,判断名称是否在 store 中,store[name] = input('Enter SSN: ') 分配新值替换旧值(如果存在)。

【讨论】:

  • 很好的答案。我自己也在研究它,我想出了基本相同的东西。主要区别在于我在更新 SSN 的部分使用了 try... except KeyError... else 块,但我更喜欢您的解决方案(可能是我见过的对 continue 的最佳使用)。
  • 刚刚运行了这个,那就完美了!太感谢了!我从一本字典开始,然后它又长又复杂(仍在学习字典和 python),所以我去了列表路线,然后我们就到了!
【解决方案2】:

如果我没看错... 看起来现在您正在创建一个名为“商店”的列表,如果不是使用用户友好的布局打印它,而是只打印列表,它看起来像

['john', 1234, 'mike', 6644, 'wazowski', 0000]

但是,您宁愿拥有一本看起来更像的字典

{'john':1234, 'mike':6644, 'wazowski':0000}

我同意字典在这里更有意义。尝试类似

store = {}
name = 'key'
while name != '':
    name = raw_input("Enter Name: ")
    if name == '':
        break
    ssn = raw_input("Enter SSN: ")
    store[name] = ssn

在这种情况下,您唯一失去的是能够查看首先输入的名称、第二个输入的名称等。但这似乎并不像能够轻松识别哪个数字与哪个名称一样重要。

【讨论】:

    【解决方案3】:

    所以你想在字典中实现列表然后尝试

    List = [Pie]
    
    Dict = {Apple}
    
    for List in Dict:
    print(Dict)
    break
    

    也许这就是你要找的东西?

    【讨论】:

    • 这丝毫没有回答 OPs 的问题。
    • 对不起,我有点缺乏经验,我只是想帮忙:(
    • 哦,nvm恭喜老兄
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多