2016-01-12 153 views
2

我有這樣的代碼語句:添加JSON字典到另一個JSON字典在python

def add_names(req, names, firstnames, middlenames, lastnames, genders, e_mails, phone_numbers, locations, indata): 
     data = [] 
     for a in range(len(names)): 

       nxt = {"name": names[a], "profile_id": indata["profile_id"], "firstname": firstnames[a], "middlename": middlenames[a], "lastname": lastnames[a], 
         "e_mail": e_mails[a], "phone_number": phone_numbers[a], "location": locations[a], "sex": genders[a], 
         "user_id": indata["user_id"], "updated_by": indata["username"]} 

       cpnxt = nxt 
       del cpnxt['profile_id'], cpnxt['user_id'], cpnxt['updated_by'] 
       nxt.update({"jsondata": cpnxt}) 
       data.append(nxt) 

     qs = "insert into persons (id, name, user_id, profile_id, firstname, middlename, lastname, e_mail, phone_number, location, sex, updated_by) values " 
     qs += "(DEFAULT, %(name)s, %(user_id)s, %(profile_id)s, %(firstname)s, %(middlename)s, %(lastname)s, %(e_mail)s, %(phone_number)s, %(location)s, %(sex)s," 
     qs += " %(updated_by)s) returning id" 
     res = db_add_list(req, qs, data) 
     return res 

在這裏,基本上我得到列表值作爲參數,並把列表值到名爲nxt{} json的字典,通過使用查詢"qs"db_add_list()函數將它們添加到數據庫中。

現在,我想要做的是;我想在nxt{}字典中添加一個json字典。我的字典將是nxt{}字典的子集,僅包含nxt{}的一些值。

我想這樣做與此代碼,但我得到這樣一個奇怪的輸出:

nxt = {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {...}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'} 

如何管理辦呢?

回答

1

只需更新您的nxt字典並添加您的新的子集詞典。

nxt.update({"new_dic": my_new_dic}) 
+0

這很奇怪,但有一個奇怪的循環更新字典。 – yusuf

+1

可以更新你的代碼嗎?所以我可以看到你在那裏做了什麼。 –

+0

好的,我現在會更新我的代碼。 – yusuf

1

您可以將其添加爲一個鍵值對的nxt字典。像這樣:

nxt['subset'] = {'key': 'value'} 
1

上述兩種解決方案的工作,我用pythons外殼給你看。

In [1]: next = {} 

In [2]: indexer = {} 

In [3]: next['indexer'] = indexer 

In [4]: upd = {} 

In [5]: next.update({'upd' : upd}) 

In [6]: next 

Out[6]: {'indexer': {}, 'upd': {}}