2017-07-05 5 views
-1

私は以下のネストされた辞書を持っています:facebook。重要な値のペアの1つが友人であることに気付くでしょう:["friend1"、 "friend2"など)。さまざまな友人をリストに追加しようとすると、それは正しいフォーマットではありません。リスト項目をネストされた辞書の値として更新する

質問1:誰かがこの問題を解決するための答え/ソリューションを提供してもらえます。与えられた情報を追加する際の望ましい出力は、辞書のJohnとMary(キー)と同じ形式でなければなりません。

注:キーは以下のとおりです。ジョン、メアリー(およびregister_userで、私はキーを追加しよう:氏はをx)が示すように、値は、友人個々の(キー)のためにリストに格納されます。私がよく分からないことは、キーと値を辞書に "追加"するときに値を追加することができますが、キーを追加するか、値を追加するときにキーを参照するかです。これまで

コード:

facebook={'John': {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'], 
      'Gender': 'Male', 
      'Hobby': 'Chess'}, 


      'Mary': {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'], 
      'Gender': 'Female', 
      'Hobbies': 'Chequers'}} 

def main(): 
    register_user() 

#create a dictionary that stores the profiles of users 


def register_user(): 
    name=input("Enter Name:") 
    friend1=input("Friend 1:") 
    friend2=input("Friend 2:") 
    friend3=input("Friend 3:") 
    friend4=input("Friend 4:") 
    #gender=input("Enter Gender:") 
    #hobby=input("Enter your main hobby:") 

    #this adds an entry to the dictionary 
    facebook.update({name:[friend1,friend2,friend3,friend4]}) 
    for i in facebook.items(): 
    print(i) 

    print() 

    print(facebook.items()) 


main() 

誤った出力:前述のようには *、私はFriend1をしたいと思い、友達2など、キーのリスト値に追加する:友人、ミスター中Xの新しいエントリ。

Enter Name: Mr X 
Friend 1: Friend1 
Friend 2: Friend2 
Friend 3: Friend3 
Friend 4: Friend4 
('John', {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'], 'Gender': 'Male', 'Hobby': 'Chess'}) 
('Mary', {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'], 'Gender': 'Female', 'Hobbies': 'Chequers'}) 
('Mr X', ['Friend1', 'Friend2', 'Friend3', 'Friend4']) 

dict_items([('John', {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'], 'Gender': 'Male', 'Hobby': 'Chess'}), ('Mary', {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'], 'Gender': 'Female', 'Hobbies': 'Chequers'}), **('Mr X', ['Friend1', 'Friend2', 'Friend3', 'Friend4'])])** 

アップデート:私もこれを試してみました Facebookの。アップデート({名:{フレンズ:[friend1、friend2、friend3、friend4]}})

が、それは次のエラーを思い付いた:

Traceback (most recent call last): 
    File "python", line 35, in <module> 
    File "python", line 11, in main 
    File "python", line 26, in register_user 
NameError: name 'Friends' is not defined 

もう一つの試み:

残念ながらまだ
facebook[name]={'Friends':[friend1,friend2,friend3,friend4]} 

エラー:

Traceback (most recent call last): 
    File "python", line 35, in <module> 
    File "python", line 11, in main 
    File "python", line 27, in register_user 
TypeError: 'type' object does not support item assignment 
構文エラーだけ APPENDを使用しようと一緒に

newfriends=[friend1,friend2,friend3,friend4] 
    facebook.update({name:{[newfriends]}) 

結果として得られる:

最後に、私はまた、リストに名前を追加して、このように、このリストを追加しようとしています:

friendslist=[friend1,friend2,friend3,friend4] 
    facebook['name'].append(friendlist) 

ERROR:

KeyError: 'name' 

この試みは近づき、しかしかなり:

Enter Name: t 
Friend 1: 1 
Friend 2: 2 
Friend 3: 3 
Friend 4: 4 
{'John': {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'], 'Gender': 'Male', 'Hobby': 'Chess'}, 'Mary': {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'], 'Gender': 'Female', 'Hobbies': 'Chequers'}, 'Name': 't', 'Friends': ['1', '2', '3', '4']} 

明確化:

facebook.update({"Name":name,"Friends":[friend1,friend2,friend3,friend4]}) 

には、次の出力を生成し、私はこれに近づいて、いくつかの異なる方法があるかもしれません実現します。私はあなたの問題を解決するために

答えて

3

一つの方法は、defaultdictfacebook辞書を変換することです(ラムダのような、または何かをインポートすること)新しいものを導入することなく、問題に簡単な修正をしたいと思います。

dd_facebook[name]['Friends'].extend([friend1,friend2,friend3,friend4]) 
+0

これは動作しません:

from collections import defaultdict dd_facebook = defaultdict(lambda: {"Friends": []}, facebook) 

は友人があなたは、単に次の操作を行うことができリスト更新します。入力:Mr X、friend1、friend2、friend3、friend4を使用すると、KeyError: 'Mr X'という結果になります。私は自分の質問がアップヴォートでできると思う...これは人にとって非常に役に立ち、私は重複をチェックした。 :) – MissComputing

+0

これはありがとう、しかし私はラムダとインポートの必要性を導入せずにそのまま問題を解決する答えがほしいと思う。教育目的のために、これは比較的簡単に行うべきです - 私がする必要があるのは、辞書に複数のキーを持つエントリを追加することだけです。私は誰かが助けることを望んでいる – MissComputing

+0

@MissComputingあなたは最も平凡な方法を探していた。この答えは非常に不快です。あなたが何か他のものを望むなら、あなたの質問はより正確でなければなりません。 – miindlek

関連する問題