2016-11-24 84 views
0
import json 

body = { u'username': u"aws", u'status': u'Full', u'lname': u'Singh',u'company_id': {u'displayName': u'Root'},u'person_no': u'89',u'fname': u'Aws', u'gender':2, u'userid': u'guest'} 
data = json.dumps(body) 
json_data = loads(data) 

keylist = data.keys() 

我已提取的主鍵(第1個密鑰):primary_keylist即如何追加「在python字典,值的端

[u'username', u'status', u'person_no', u'gender', u'company_id', u'lname', u'fname', u'userid'] 

現在我想追加」到對應於層的所有值1個鍵。

我想:

json_data[key] = json_data[key] + "'" 

如果我用它來改變單一的值,那麼它是工作 但是當我試圖更新所有鍵(primary_keylist)

for key in keylist: 
    if key in primary_keylist: 
     json_data[key] = json_data[key] + "'" 
    else: 
     pass 

然後它不工作。 如何一次更新所有的值?

Error: TypeError: unsupported operand type(s) for +: 'dict' and 'str' 
+0

什麼是'primary_keylist'?另外,請發佈你想要的結果字典的樣子,你有一個嵌套的字典,還有一個數字,在這些情況下會發生什麼? –

+0

'else:pass' is useless –

+0

你的代碼是否會拋出任何錯誤? – neverwalkaloner

回答

0

嘗試以下操作:

primary_keylist = [u'username',u'status',u'person_no',u'gender', u'company_id', u'lname', u'fname', u'userid'] 

res = [key+"'" for key in keys] 

輸出:

>>>res 
[u"username'", u"status'", u"person_no'", u"gender'", u"company_id'", u"lname'", u"fname'", u"userid'"] 

json_data更新值,使用以下命令:

res = {item[0]:str(item[1])+"'" for item in json_data.items()} 

輸出:

>>> import json 
>>> 
>>> body = { u'username': u"aws", u'status': u'Full', u'lname': u'Singh',u'company_id': {u'displayName': u'Root'},u'person_no': u'89',u'fname': u'Aws', u'gender':2, u'userid': u'guest'} 
>>> res = {item[0]:str(item[1])+"'" for item in body.items()} 
>>> res 
{u'username': "aws'", u'status': "Full'", u'person_no': "89'", u'gender': "2'", u'userid': "guest'", u'company_id': "{u'displayName': u'Root'}'", u'lname': "Singh'", u'fname': "Aws'"} 

要考慮到嵌套詞典,使用以下命令:

res = {} 

for item in body.items(): 
    if not isinstance(item[1], dict): 
     res[item[0]] = str(item[1])+"'" 
    else: 
     res[item[0]] = {i:str(item[1][i])+"'" for i in item[1]} 

輸出:

>>> res 
{u'username': "aws'", u'status': "Full'", u'person_no': "89'", u'gender': "2'", u'userid': "guest'", u'company_id': {u'displayName': "Root'"}, u'lname': "Singh'", u'fname': "Aws'"} 
+0

錯誤它工作。謝謝。 有沒有什麼特別的原因,爲什麼循環不適合這個。 –

+0

沒有理由,只是列表理解(在我的答案中使用)更實用。你的問題是你試圖把'dict'加到'str'「'」中,我在你的問題的評論中提到過。 – ettanany

+0

通過上述解決方案,我得到: u'company_id':「{u'displayName':u'Root'}'」 請注意'正在追加項目[1]的末尾。但我想要結果如 u'company_id':「{u'displayName':u'Root''}」 append'在根的末尾。 –

0

另一種方式來做到這一點:

primary_keylist = [u'username', u'status', u'person_no', u'gender', u'company_id', u'lname', u'fname', u'userid'] 

primary_keylist = [('').join([item, "'"]) for item in primary_keylist]