2016-03-25 5 views
1

:オリジナルキーの値のペアをアカウント番号(accno)、名前、または残高。複数のキーを持つ辞書ソート:ユーザーがでソートすることにより、いずれかのアカウントのすべてを見ることができる場所</p> <pre><code>bank_accts={accno:{"Name":"<str>","Balance":<num>}, repeat}. </code></pre> <p>が、私は関数を実行する必要があります:私は辞書を持っていると値のペア

私はif、elif、else文を持っていますが、私はaccnoでソートしています。名前や天びんでソートすることができないようです。私はいくつかの複雑なコードを見てきましたが、私が必要とする方法で動作させることができませんでした。だから私はすべての "名前"の値を並べ替えることができるようにすることを決めました。しかし、問題はそれぞれの値がそれぞれの文字を区切って別のリストに入れられることです。

ご協力いただきありがとうございます。私は非常に新しく、数週間でPythonを学ぶためのブートキャンプにいます。インストラクターはGoogleの答えのほうが多いので、私が行くにつれて勉強しようとしています。ありがとう!

#This function will show all the bank accounts 
def view_all_accts(): 
    sort=input("How would you like to sort? Please choose by account, name, or balance. ") 
    if sort.lower() == "account": 
     for acct in sorted(bank_acct.keys()): 
      print("Account: %s" %(acct)) 
      for key in bank_acct[acct]: 
       print(key +":"+str(bank_acct[acct][key])) 
    elif sort.lower() == "name": 
     for acct in bank_acct.keys(): 
      name=bank_acct[acct]["Name"] 
      #gives every value of "Name" 
      print(name) 
      #will make every value into own list with each char separated 
      temp=list(name) 
      print(temp) 
    #elif sort.lower()=="balance": 
    else: 
     print("Please choose account, name, or balance!") 

答えて

0

トリックは、sorted()関数に対してkeyパラメータを使用することです。これにより、ソートの比較値として必要なデータ構造内の任意のキーを使用できます。

あなたがしたいもう一つは、効果的に3つの多かれ少なかれ別々の部分でプログラムを分割することです:印刷アウトこのデータ構造をユーザの入力

  • ソートされたデータ構造を作りなさい

    これを行わないと、あなた自身が繰り返されます。あなたの例では、ループバックを行い、bank_acctを2か所に印刷しています。後で何かを変更したいのですが? - あなたが今移動することができます部品この機能は現在、三つの独立した部分に分離されているか

    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() 
    

    注意:次の2つの場所;-)

    ここで追加はコメントとの完全な例だでそれを変更する必要があると思いますそれ自身の機能に

  • +0

    ありがとうございます!私はあなたがしていることを理解しています。これは素晴らしいことです!他の誰かがこれを使用している場合は、部分的には2、if sort = = 'account':それはsorted_dict = sorted(bank_acct.items())でなければなりません。また、何かを始める前にsorted_dict = {}を追加することを忘れないでください。さらに、3つの検索すべてで同じフォーマットに制限されますが、これは必要な場合としない場合があります。再度、感謝します! – Tigger

    +0

    @Tiggerおっと、私はコードをテストし、答えにコピーし、マイナーな細部を変更してコメントを追加しました。私はそれを試して忘れてしまった> _ <あなたはどこでも 'sorted_dict = {}'は必要ないと思う?まず、それはdictではないリストです(ええ、名前はばかです、私は 'sorted_list'に変更しました)が、もっと重要なことに、常に設定されています... – Carpetsmoker

    0

    プライマリディクショナリにはキーが割り当てられています。 2つのインデックスディクショナリを作成します。名前とバランスはキーとして、accnoは値リストの要素として使用されます。 (名前またはバランスが複数回発生する可能性があるため)

    プリムdictの各インサートには、右側のキーの下のインデックスdictsにも挿入します。

    プリムから削除するたびに。また、名前と残高をキーとして索引辞書から削除することもできます。名前または残高のリストが空になると、インデックスの要素全体が削除されます。

    各DICTからキーを並べ替えることができるようになりました。これは(通常の)「データベースの索引付け」です。

    0

    ありがとうございました!私はcarpetsmokerの答えが好きです。私は自分自身で以下の解決策を考え出し、他の価値 "残高"についてelifのステートメントを繰り返します:

    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)) 
    
    関連する問題

     関連する問題