2016-11-24 83 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]