【问题标题】:How to append ' at end of values in python dictionary如何在python字典中的值末尾附加'
【发布时间】:2016-11-24 11:55:10
【问题描述】:
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 即

[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'

【问题讨论】:

  • primary_keylist 是什么?另外,请发布您希望结果字典的外观,您有一个嵌套字典,并且还有一个数字,在这些情况下应该发生什么?
  • else: pass 没用
  • 你的代码有没有报错?
  • json_data[key] 并不总是一个字符串,因此如果不将其转换为字符串,就无法将其与' 连接。
  • @JimFasarakis-Hilliard primary_keylist 是第 1 层密钥的集合。 def check_nested_json(json_data,keylist): count = 0; n_keylist = [] new_keylist = [] primary_keylist = [] 用于 keylist 中的键:count = count +1 for i in range(0,count): try: n_key = json_data[keylist[i]].keys() n_keylist.append (keylist[i]) new_keylist.append(n_key) except AttributeError: primary_keylist.append(keylist[i]) return primary_keylist

标签: python python-2.7 python-3.x dictionary


【解决方案1】:

尝试以下方法:

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'"}

【讨论】:

  • 成功了。谢谢。有什么特别的原因为什么 for 循环不适合这个吗?
  • 没有理由,只是列表理解(在我的回答中使用)更实用。您的问题是您尝试将dict 添加到str“'”。我在对您的问题的评论中提到了这一点。
  • 通过上述解决方案,我得到: u'company_id': "{u'displayName': u'Root'}' " 请注意 ' 附加在 item[1] 的末尾。但我想要像 u'company_id':"{u'displayName': u'Root''} " append ' 这样的结果在 Root 的末尾。
  • @AnubhavSingh 使用我的第二个示例,您应该能够在每个值的末尾添加“'”,看看我的第二个“输出”
  • 我试过了,但它不适用于值,只适用于键。
【解决方案2】:

另一种方法:

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2017-09-01
    • 2021-01-27
    • 2020-05-28
    相关资源
    最近更新 更多