2016-03-03 65 views
0

我目前正在python 3中读取JSON字符串并修改它们的程序。我需要搜索包含某个单词的值,然后将其反转。下面是我的代码有:颠倒python中的字典中的字符串值3

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)) 

这逆转包含快乐的字符串,但也扭转产生这样的元组:

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

任何人都知道一个办法只有扭转字符串,不可逆的元组,以及?

**我自学蟒蛇,这是使用它

+3

哪些元组?如果你的意思是在字典中排序,它不能完成。字典没有排序。 – zondo

+1

'反转元组'你是什么意思? – njzk2

+0

也,json对象也不排序。某种表示不能保证键的顺序(因为没有顺序)。 – njzk2

回答

4

如果你想保留的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"}' 
+0

我实际上并不知道json字符串是什么,我只是用它来测试。我必须编写一个函数,它接受一个json字符串并搜索“关键字”来反转字符串。这将是一个消息服务,并且必须将修改后的消息推送到队列中以供稍后检索 – mbear

+0

@mbear当然,我知道,这仅仅是一个示例。 – univerio

+0

为了澄清,常规字典中的键的顺序不能保证,并且通常不会与您输入它们的顺序相同。 OrderedDict的目的是保留您提供密钥的顺序。但是,如果您提供密钥的顺序非常重要,则可能需要重新考虑算法和/或数据结构。 'OrderedDict'绝对有一席之地,但有一个原因,它不是默认的实现(主要是散列效率和大多数实现中的排序效果很差)。 –