【问题标题】:reverse a string value within a dict in python 3在python 3中的dict中反转字符串值
【发布时间】:2016-03-03 02:38:00
【问题描述】:

我目前正在使用 python 3 编写一个程序,该程序读取 JSON 字符串并对其进行修改。我需要搜索一个包含某个单词的值,然后将其反转。这是我的代码:

msg = '{"company": "Happy, Inc.", "agent": "007"}' 
message = json.loads(msg)

for k , v in message.items():
        if not k.startswith("_"):
            if 'Happy' in v:
                message[k] = v[::-1]
print (json.dumps(message))

这反转了包含 Happy 的字符串,但也反转了产生这个的元组:

{"agent": "007", "company": ".cnI ,yppaH"}

任何人都知道一种只反转字符串而不反转元组的方法吗?

**我正在自学python,这是我第一个使用它的程序

【问题讨论】:

标签: python json python-3.x


【解决方案1】:

如果您想保留 JSON 中键的顺序,可以将其解析为 OrderedDict

>>> message = json.loads(msg, object_pairs_hook=OrderedDict)
>>> message["company"] = message["company"][::-1]
>>> message
OrderedDict([(u'company', u'.cnI ,yppaH'), (u'agent', u'007')])
>>> json.dumps(message, sort_keys=False)
'{"company": ".cnI ,yppaH", "agent": "007"}'

【讨论】:

  • 我实际上并不知道 json 字符串是什么,我只是以这种方式编写它以进行测试。我必须编写一个接受 json 字符串并搜索“关键字”来反转字符串的函数。它将是一个消息服务,必须将修改后的消息推送到队列中以便稍后检索
  • @mbear 当然,我知道,这只是一个例子。
  • 澄清一下,常规字典中键的顺序并不能保证,并且通常不会与您输入它们的顺序相同。 OrderedDict 的目的是保留您提供密钥的顺序。但是,如果您提供密钥的顺序很重要,您可能需要重新考虑您的算法和/或数据结构。 OrderedDict 肯定有一席之地,但它不是默认实现是有原因的(主要是哈希效率,并且在大多数实现中从排序中受益不大)。
猜你喜欢
  • 2015-10-27
  • 1970-01-01
  • 2010-10-30
  • 2019-05-02
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多