用多个键:值对在原稿中关键:价值派

2024-05-20 17:59:37 发布

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

我有一本字典:

bank_accts={accno:{"Name":"<str>","Balance":<num>}, repeat}.

我需要运行一个函数,用户可以通过按帐号(accno)、名称或余额排序来查看所有帐户。在

我有一个if,elif,else语句,我让sort by accno工作。我似乎无法按姓名或余额排序。我看过一些复杂的代码,但无法按我需要的方式运行。所以我决定尝试将所有的“Name”值放入一个列表中,然后对其进行排序;但是,问题是每个值都被放入一个单独的列表中,每个字符都是分开的。在

任何帮助我们都深表感激。我是新来的,几周后我将参加一个学习python的训练营。老师更像是谷歌的答案,所以我在努力学习。谢谢!在

^{pr2}$

Tags: 函数用户name列表字典排序num余额
3条回答

您的主词典的关键字是accno。 创建2个索引字典,其中name和balance作为键,accno作为值列表的元素。(因为名称或余额可以多次出现)

每次在主字典中插入时,也在右键下的索引dict中插入。在

每次从prim删除。dict,也从索引中删除使用name和balance作为键的dicts。当名称或余额的列表为空时,删除索引的整个元素。在

现在您可以简单地从每个dict中对键进行排序。这是(正常的)“数据库索引”。在

感谢您的输入!我喜欢地毯吸烟者的回答。我自己也提出了下面的解决方案,并将重复elif对我的另一个值“Balance”的陈述:

elif sort.lower() == "name":
        temp=[]
        for acct in bank_acct.keys():
            temp.append(bank_acct[acct]["Name"])
        #print(temp)
            temp.sort()
        #print(temp)
        for name in temp:
            for acct in bank_acct.keys():
                if name==bank_acct[acct]["Name"]:
                    print("Name: %s, Balance: $%d, Account #%s" %(bank_acct[acct]["Name"],bank_acct[acct]["Balance"],acct))

诀窍是在^{}函数中使用key参数;这将允许我们使用数据结构中的任何键作为排序的比较值。在

您要做的另一件事是有效地将程序分成三个或多或少独立的部分:

  1. 获取用户输入
  2. 建立一个有序的数据结构
  3. 打印出这个数据结构。在

如果你不这样做,你最终会重复你自己。在你的例子中,你在两个地方循环并打印出bank_acct现在如果你想以后改变什么呢?你必须在两个地方改变它;-)

以下是添加了注释的完整示例:

bank_accts = {
    '456': {"Name":"LaVey","Balance":666},
    '123': {"Name":"Adams","Balance":42},
    '999': {"Name":"Zelany","Balance":64},
}

def view_all_accts():
    #########################
    ### 1. Get user input ###
    #########################
    # Get input, lowercase it
    sort = input("How would you like to sort? Please choose by account, name, or balance. ").lower()

    # Check if this is a valid key 
    valid_keys = ['account', 'name', 'balance']
    if sort not in valid_keys:
        print("Please choose account, name, or balance!")

        # Ask for input again
        return view_all_accts()

    #######################################
    ### 2. Make a sorted data structure ###
    #######################################
    # The key name (account) is a special case, so handle that first
    if sort == 'account':
        sorted_list = sorted(bank_accts.items())
    # Sort by one of the values
    else:
        # Capitalize the first letter of the sort key
        sort_key = sort.capitalize()

        # Now we can use the key= parameter for sorted()
        sorted_list = sorted(bank_accts.items(), key=lambda v: v[1][sort_key])

    #########################################
    ### 3. Print out this data structure. ###
    #########################################
    for account, data in sorted_list:
        print("Account: %s" % account)
        for k, v in data.items():
            print("  %s: %s" % (k, v))

view_all_accts()

请注意这个函数现在是如何分为三个独立的部分,即现在可以移动到它们自己的功能的部分。在

相关问题 更多 >